起動中のメモ帳を自動保存(Python)
概要
起動中の「*無題 – メモ帳」となっている
保存されていないメモ帳を適当なファイル名(日付)で保存する。
プログラムを作成した理由
ある日の平日、仕事をサボってTwitterを見ていたところ
情報収集に勤しんでいたところ、
ある一つのツイートが目に留まりました。
言われてみると、確かに面倒くさい…!!!
私は忘れっぽい性格の為、
上司や先輩等に「あれやっといて」と連絡が来た際、
その場で対応出来ないものは、メモ帳に内容を記載しておきます。
そうするとお昼頃には、↓のように「無題 – メモ帳」だらけになっていきます。
そして、
「無題 – メモ帳」を保存していないまま、
シャットダウンした際に警告画面が表示されてしまいます。
「…うん、取り合えず適当なファイル名で保存しておいて。後日ちゃんと見ておくからさ」
とPCに言いたくなります(笑)
先程のツイートを拝見するまでは対して気にしていなかったのですが、
「言われてみると確かに面倒だな…面白そうだしプログラム作るか!」と興味をそそられたのがキッカケです。
実行内容&動画
- 「メモ帳」で終わるウィンドウ取得し、ウィンドウをアクティブ
- 「ctrl」「s」をキー送信
- 日付をファイル名としてキー送信
- 「enter」をキー送信
- 1~4を繰り返し実行
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | """ 概要:メモ帳自動保存 ・1回でも保存された事があるメモ帳 → 上書き保存 ・1回も保存された事がないメモ → 日付をファイル名として保存 """ from datetime import datetime import ctypes import pyautogui import win32gui import pyautogui import time user32 = ctypes.WinDLL("user32") EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.c_void_p) user32.EnumWindows.restype = ctypes.c_bool user32.EnumWindows.argtypes = (EnumWindowsProc, ctypes.c_void_p) user32.GetWindowTextW.restype = ctypes.c_int32 user32.GetWindowTextW.argtypes = (ctypes.c_void_p, ctypes.c_wchar_p, ctypes.c_int32) def callback(hWnd, lParam): windowText = ctypes.create_unicode_buffer(1024) user32.GetWindowTextW(hWnd, windowText, len(windowText)) # 「メモ帳」で終わるウィンドウの場合 if windowText.value.endswith("メモ帳"): # 該当ウィンドウ をアクティブ win32gui.SetForegroundWindow(hWnd) time.sleep(2) # アクティブとなったウィンドウにキー送信して上書き保存 pyautogui.hotkey('ctrl','s') # 「*無題」の場合、初回保存として保存 # (ctrl+sを押した事で「名前を付けて保存」状態になっている) if windowText.value.startswith("*無題"): # 待機 time.sleep(2) # 現在日付を「yyyymmdd_hhmmss」形式で取得 save_time = datetime.now().strftime('%Y%m%d_%H%M%S') # ファイル名入力 pyautogui.typewrite(save_time + ".txt") # 決定して保存 pyautogui.hotkey('enter') time.sleep(2) return True user32.EnumWindows(EnumWindowsProc(callback), None) print("完了致しました!") |
感想
本プログラムを
「タスクスケジューラ」で「PC終了時に実行」と設定すれば、
シャットダウン時にプログラムを自動実行出来ます…が、
「アクティブになったウィンドウにキーを送る」という処理の為、
安定性に欠けるプログラムである事が残念な点です。意図していないウィンドウ、アプリ等にキー送信してしまう危険性がある為、現状では配布出来るレベルではありません…。。。
今回はメモ帳だけの保存でしたが、
Excel、Word、PowerPointと様々なファイルを保存したい場合は
プログラムに追記する必要があるのも難点です。
しかし、
普段の業務では扱わない「ウィンドウ操作」に着手出来たので、今後何かの役に立ちそうです。
業務に関する自動化、効率化だけでは視野が狭くなるので、
今回は良いトレーニングになったのではないかと思います(笑)
私個人で使う分には現状でも充分使えるので、
今後使い続けて改良版作成し、満足のいく完成度になった場合は追記したいと思います!
編集履歴
2022/01/22 新規作成