Windows11のメモ帳(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 pywinauto2.メモ帳のウィンドウ内のすべての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()を利用したほうが、画面表示が完了したタイミングで処理を続行できるため、より安定した自動化を実現できます。
まとめ
Windows11のメモ帳アプリの設定変更は、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 セットアップを自動化したい
- 繰り返し作業を効率化したい
- 現場の運用負荷を減らしたい
このようなお悩みがありましたら、ぜひお問い合わせフォームよりお問い合わせください。


コメント
コメント一覧 (1件)
[…] Windows11のメモ帳設定をPython(pywinauto)で完全自動化する方法 […]