はじめに
Windows 11 のメモ帳( Notepad )は、従来のメモ帳から大きく仕様が変更されました。
デフォルトでは次のような設定になっています。
- 「文字列の折り返し」:オン
- 「ファイルを開く方法」:新しいタブで開く
- 「メモ帳の起動時」:前のセッションを続行
人によっては便利な変更ですが、従来のメモ帳の使い方に慣れている場合や、業務でテキストファイルを頻繁に扱う場合には、使いづらいと感じることも少なくありません。
しかし、これらの設定はレジストリや PowerShell、コマンドラインから変更する方法が用意されておらず、GUI で一つひとつ操作するしかありません。
そこで今回は、Python の pywinauto ライブラリを利用して、メモ帳の設定変更を GUI 操作ごと完全自動化する方法を紹介します。
例えば、
- PC の初期セットアップを自動化したい
- 数十~数百台の PC へ同じ設定を適用したい
- キッティング作業を効率化したい
といった場面で役立つ内容です。
環境
執筆時点の検証環境は以下のとおりです。
- Python:3.12.8
- Anaconda:24.11.3
- Jupyter Notebook:7.3.2
- メモ帳アプリ:11.2605.34.0
本記事のコードは上記環境で動作を確認しています。
環境が異なる場合でも基本的な手順は同じですが、Python やメモ帳アプリのバージョンによっては、ウィンドウ名や UI 要素などが変更されており、一部コードの修正が必要になる場合があります。
予めご了承ください。
完全自動化の方法
大まかな流れとしては以下のとおりです。
-
pywinautoライブラリのインストール - メモ帳のウィンドウ内のすべての UI 要素を取得
- 要素を指定しクリック操作を送信
それぞれ詳しく解説していきます。
1.pywinauto ライブラリのインストール
Windows 上の GUI 操作を自動化するには、Pythonライブラリの pywinauto を使用します。
GUI 自動化ライブラリには pyautogui もありますが、pyautogui は画面座標を基準に操作するため、ウィンドウの位置や解像度が変わると動作しなくなることがあります。
一方、pywinauto はウィンドウやボタンなどのUI要素を直接認識して操作できるため、Windows アプリケーションの自動操作に適しています。
まずは pywinauto をインストールしましょう。
▼ Terminalの場合 ▼
pip install pywinauto
▼ Jupyter Notebookの場合 ▼
!pip install pywinauto
2.メモ帳のウィンドウ内のすべてのUI要素を取得
pywinauto は、ウィンドウやボタン、チェックボックスなどの UI 要素を直接指定して操作できるライブラリです。
そのため、自動化を行う前に、操作対象となる UI 要素がどのような名前や階層になっているのかを確認する必要があります。
まずは、pywinauto の Desktop クラスをインポートします。
from pywinauto import Desktop
次に、以下のコードでメモ帳全体の要素を確認します。
notepad = Desktop(backend="uia").window(title_re=".*メモ帳.*")
notepad.print_control_identifiers()
そして、以下の4つの状態でも要素を確認します。
1.メモ帳を開いた状態
2.設定画面を開いた状態
3.「新しいタブで開く」をクリックした状態
4.「メモ帳の起動時」をクリックした状態
3.要素を指定しクリック操作を送信
「1.メモ帳を開いた状態」の要素として、以下の要素があります。
| | | Button - '設定' (L899, T273, R929, B305)
| | | ['設定Button', 'Button14', '設定']
| | | child_window(title="設定", auto_id="SettingsButton", control_type="Button")
これは、メモ帳右上の設定ボタンの要素となります。
この設定ボタンの要素を指定し、click_input() にてクリック操作を与えることで設定画面を開くことができます。
setting = notepad.child_window(title="設定", auto_id="SettingsButton", control_type="Button")
setting.click_input()
続いて、設定画面内の代表的なものについて自動化していきます。
文字列の折り返しの変更
文字列の折り返しに関する要素は「2.設定画面を開いた状態」にある要素であり、以下のものになります。
| | | | | Button - '文字列の折り返し' (L798, T429, R872, B469)
| | | | | ['文字列の折り返し2', 'Button3', '文字列の折り返しButton']
| | | | | child_window(title="文字列の折り返し", auto_id="WordWrapSwitch", control_type="Button")
「オン」もしくは「オフ」にするには、要素を指定し、click_input() にてクリック操作を与えることで可能です。
wordwrap = notepad.child_window(title="文字列の折り返し", auto_id="WordWrapSwitch", control_type="Button")
wordwrap.click_input()
全体像としては以下の通りです。
from pywinauto import Desktop
notepad = Desktop(backend="uia").window(title_re=".*メモ帳.*")
setting = notepad.child_window(title="設定", auto_id="SettingsButton", control_type="Button")
setting.click_input()
wordwrap = notepad.child_window(title="文字列の折り返し", auto_id="WordWrapSwitch", control_type="Button")
wordwrap.click_input()
ファイルを開く方法の変更
ファイルを開く方法に関する要素は、以下のものになります。
| | | | | ComboBox - 'ファイルを開く方法' (L716, T612, R876, B652)
| | | | | ['ファイルを開く方法ComboBox', 'ComboBox', 'ファイルを開く方法2']
| | | | | child_window(title="ファイルを開く方法", auto_id="OpenFileComboBox", control_type="ComboBox")
また、「新しいタブで開く」をクリックした後に要素を再度取得すると、以下の要素があります。
| | | | | | Static - '新しいウィンドウで開く' (L738, T660, R857, B679)
| | | | | | ['新しいウィンドウで開く2', 'Static2', '新しいウィンドウで開くStatic', '新しいウィンドウで開くStatic0', '新しいウィンドウで開くStatic1']
| | | | | | child_window(title="新しいウィンドウで開く", control_type="Text")
上記の要素については child_window(title="PopupHost", control_type="Pane") 配下のものと ['Pane3', '書式設定Pane2'] 配下の2つ存在します。
その状態だと、どちらの要素か判別がつかなくなってしまうため、PopupHost を指定したうえでクリック操作を与えましょう。
fileopen = notepad.child_window(title="ファイルを開く方法", auto_id="OpenFileComboBox", control_type="ComboBox")
fileopen.click_input()
popuphost = notepad.child_window(title="PopupHost", control_type="Pane")
windowopen = popuphost.child_window(title="新しいウィンドウで開く", control_type="Text")
windowopen.click_input()
全体像としては以下のようになります。
from pywinauto import Desktop
notepad = Desktop(backend="uia").window(title_re=".*メモ帳.*")
fileopen = notepad.child_window(title="ファイルを開く方法", auto_id="OpenFileComboBox", control_type="ComboBox")
fileopen.click_input()
popuphost = notepad.child_window(title="PopupHost", control_type="Pane")
windowopen = popuphost.child_window(title="新しいウィンドウで開く", control_type="Text")
windowopen.click_input()
メモ帳の起動時の変更
メモ帳の起動時に関する要素は以下のものになります。
| | | | | Static - 'メモ帳の起動時' (L125, T694, R213, B713)
| | | | | ['メモ帳の起動時2', 'メモ帳の起動時Static', 'Static13']
| | | | | child_window(title="メモ帳の起動時", auto_id="TitleBlock", control_type="Text")
また、「メモ帳の起動時」をクリックした後に再度要素を取得すると、以下の要素があります。
| | | | | | RadioButton - '新しいセッションを開始し未保存の変更を破棄' (L125, T785, R408, B817)
| | | | | | ['新しいセッションを開始し未保存の変更を破棄RadioButton', '新しいセッションを開始し未保存の変更を破棄', 'RadioButton2']
| | | | | | child_window(title="新しいセッションを開始し未保存の変更を破棄", auto_id="TurnOffButton", control_type="RadioButton")
まとめると、「メモ帳の起動時」のクリック操作をまず与え、次に「新しいセッションを開始し未保存の変更を破棄」のクリック操作を与えることで変更が可能になるということです。
notepadopen = notepad.child_window(title="メモ帳の起動時", auto_id="TitleBlock", control_type="Text")
notepadopen.click_input()
newsettion = notepad.child_window(title="新しいセッションを開始し未保存の変更を破棄", auto_id="TurnOffButton", control_type="RadioButton")
newsettion.click_input()
全体像としては以下のようになります。
from pywinauto import Desktop
notepad = Desktop(backend="uia").window(title_re=".*メモ帳.*")
notepadopen = notepad.child_window(title="メモ帳の起動時", auto_id="TitleBlock", control_type="Text")
notepadopen.click_input()
newsettion = notepad.child_window(title="新しいセッションを開始し未保存の変更を破棄", auto_id="TurnOffButton", control_type="RadioButton")
newsettion.click_input()
上記の流れで、他の設定変更の完全自動化も可能です。
ぜひ試してみてください。
実運用
実運用では、すべての PC に Python がインストールされているとは限りません。
そのような環境では、スクリプトを exe ファイル化して配布するのがおすすめです。
まずは、コードを .py ファイルとして保存します。メモ帳などにコードを貼り付け、拡張子を .py に変更すれば作成できます。
次に、pyinstaller を使用して exe ファイルへ変換します。
▼ pyinstallerライブラリのインストール ▼
pip install pyinstaller
▼ 作成した .py ファイルをexe化 ▼
pyinstaller --onefile your_script.py
実行後、dist フォルダ内に exe ファイルが生成されます。
これにより、Python がインストールされていない PC でも実行できるようになります。
動作を安定させる方法
GUI 操作は、PC の性能や負荷状況によって画面表示のタイミングが変わるため、タイミングによっては UI 要素を取得できず、処理が失敗することがあります。
そのような場合は、次のような対策が有効です。
-
set_focus()
操作対象のウィンドウをアクティブにし、最前面へ表示 -
wait()
指定したUI要素が操作できる状態になるまで待機 -
time.sleep()
画面の描画やウィンドウの切り替えが完了するまで待機 -
try...except
予期しないエラーが発生してもプログラム全体が停止してしまうことを防止
また、time.sleep() を多用するよりも、wait() を利用したほうが、画面表示が完了したタイミングで処理を続行できるため、より安定した自動化を実現できます。
まとめ
Windows 11 のメモ帳アプリの設定変更は、Python の pywinauto を利用することで GUI 操作ごと自動化できます。
本記事では、以下の内容を紹介しました。
-
pywinautoのインストール -
print_control_identifiers()を使用したUI要素の取得方法 - メモ帳の設定変更を自動化するコード
-
pyinstallerを利用した exe 化 -
set_focus()やwait()、time.sleep()を活用した動作の安定化
これらを組み合わせることで、手作業では時間のかかるメモ帳の設定変更を、ボタン一つで実行できるようになります。
特に、複数台の PC をセットアップするキッティング作業や、企業内で設定を統一したい場面では、大きな作業時間の削減につながります。
pywinauto はメモ帳だけでなく、多くの Windows アプリケーションの GUI 操作にも応用できます。ぜひ、自身の業務や環境に合わせて活用してみてください。
▼ 文字列の折り返しの変更 ▼
from pywinauto import Desktop
notepad = Desktop(backend="uia").window(title_re=".*メモ帳.*")
setting = notepad.child_window(title="設定", auto_id="SettingsButton", control_type="Button")
setting.click_input()
wordwrap = notepad.child_window(title="文字列の折り返し", auto_id="WordWrapSwitch", control_type="Button")
wordwrap.click_input()
▼ ファイルを開く方法の変更 ▼
from pywinauto import Desktop
notepad = Desktop(backend="uia").window(title_re=".*メモ帳.*")
setting = notepad.child_window(title="設定", auto_id="SettingsButton", control_type="Button")
setting.click_input()
fileopen = notepad.child_window(title="ファイルを開く方法", auto_id="OpenFileComboBox", control_type="ComboBox")
fileopen.click_input()
popuphost = notepad.child_window(title="PopupHost", control_type="Pane")
windowopen = popuphost.child_window(title="新しいウィンドウで開く", control_type="Text")
windowopen.click_input()
▼ メモ帳の起動時の変更 ▼
from pywinauto import Desktop
notepad = Desktop(backend="uia").window(title_re=".*メモ帳.*")
setting = notepad.child_window(title="設定", auto_id="SettingsButton", control_type="Button")
setting.click_input()
notepadopen = notepad.child_window(title="メモ帳の起動時", auto_id="TitleBlock", control_type="Text")
notepadopen.click_input()
newsettion = notepad.child_window(title="新しいセッションを開始し未保存の変更を破棄", auto_id="TurnOffButton", control_type="RadioButton")
newsettion.click_input()
私自身、Windows のセットアップや定型業務の自動化・効率化をテーマに、Bat・PowerShell・Python などを活用した仕組みづくりを行っています。
- Windows セットアップを自動化したい
- 繰り返し作業を効率化したい
- 現場の運用負荷を減らしたい
このようなお悩みがありましたら、ぜひ WinDeployAuto をご覧ください。
WinDeployAuto
https://windeployauto.com
今後も、Windows の展開・運用・自動化に役立つ情報を発信していきます。









