Windows10のスクリーンショット
いつぞやのCreatorsUpdateで追加された
[Win+Shift+S]で起動できるスクリーンショット機能...
これを使うとクリップボードに画像を保存されるのですが...
やっぱりMacみたいに画像を保存したいときもあると思います!
ということで今回はWindows10で撮ったスクリーンショットをファイルに保存する
プログラムを書いていこうと思います!!
環境
- Windows10 CreatorsUpdate以降
- python3.6
必要なライブラリ
- PIL
- pynput
インポート
from PIL import ImageGrab, Image
import datetime
from pynput.keyboard import Key, Listener
クリップボードの画像を保存する関数
まずクリップボードの画像を保存する関数をさっと
書いてしまいましょう!(スピード大事!!
def save():
im = ImageGrab.grabclipboard()
if isinstance(im, Image.Image):
im.save(str("保存先をここに入力")+str(datetime.datetime.today()).replace(" ","-").replace(":","-")+'.jpg')
print('saved') #保存できた時
else:
print('no image') #保存できなかった時(なぜか保存出来てるのに出ることもある)
そして...
特定のキー 今回は[CtrlR]そう右側にあるCtrlキーを押したときにスクリーンショットを
保存するようにします!
pynputのイベントを利用するために関数を書きます
def on_press(key):
try:
if key.char == "DUMMY":
save()
print('alphanumeric key {0} pressed'.format(
key.char))
except AttributeError:
it= "{0}".format(
key)
if it == "Key.ctrl_r":
save()
詳しい説明は省きますが Ctrl,Shift,backspace,escなどを検知する時は
if it == "Key.ctrl_r":
をの部分を if it == "ESC":
といった具合に書き換えてください
数字や文字などのキーを検知するには
try分の中にある
if key.char == "DUMMY":
を if key.char == "A":
などに書き換えてください
(このコード内ではDUMMY(ダミー)を充てています)
##実行!
if __name__ == '__main__':
with Listener(
on_press = on_press,
) as listener:
listener.join()
リスナーを設定して実行するコードを書いて完了です!
試しに実行してみましょう!
(no imageって出たりそれで慌てて二回[ctrlR]を押してしまいましたが動作には問題なさそうですね!(必死))
バックグラウンドで動かしたい!
バックグラウンドで動かしたほうが絶対いいと思うんですよね..
ということでVBSとbatを利用します!
使えるものは何でも使ってやる!!
@ECHO OFF
python sc.py
sc.pyと同じディレクトリにおいてください
そして..vbsが..
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
Call WSHShell.Run("D:\twitter\start.bat", 0, True )
[Call WSHShell.Run("D:\twitter\start.bat", 0, True )]この部分はsc.pyを設置した場所を指定してください!
最後に
これで以上です!
途中Unicode系のエラーが出たりして慌てていましたが(慌てすぎ)
無事に作成できました!
これをスタートアップに登録すればもっと利便性は上がりそうです!
ソースコードたち
- https://harigami.net/contents?id=c120940c-8384-4903-a738-780b052c2f91 (sc.py)
- https://harigami.net/contents?id=da035764-629f-4ecf-a231-b47ff41ba46a (start.vbs)
- https://harigami.net/contents?id=9734e737-869c-4808-a4a7-85079f70864b (start.bat)