pythonのsubprocessモジュールではプロセスは終了できるけれども、アプリは閉じてくれなかったのでUWSCでやってみることにしましたというはなしです。僕みたいな人間にとってはプロセスとか細かいことよりも邪魔なウインドウを消したいと思うのが心情です。
UWSCでウインドウを閉じるにはどうしたらいい?
UWSCは作業を自動化するツールで、一応プログラミング言語です。UWSCはフリーソフトとしてダウンロードすることができます。マウス操作で作業を記憶させることもできますが、プログラムコードを書くことで動作させることもできます。
参考リンク: UWSC – Wikipedia
すべてのウインドウidを取得するUWSCコード
下記はUWSCのコードになります。ウインドウにはクラスがあり、それを取得するコードになります。
n = getallwin() print "ウィンドウの数:" + n ifb n > 0 for i = 0 to (n - 1) print all_win_id[i] + ":" + status(all_win_id[i], st_title) + "----------" + status(all_win_id[i], st_class) next else print "ウィンドウが見つかりませんでした" endif
上記のコードを実行するとこんな感じで全てのウインドウidを見ることができます。
Pythonで整形して読みやすくする – 読み飛ばしてもOK
テキストファイルを1行ずつ読み込むにはファイルをforループで回します。1行ずつ’—-‘をsplit()で分割してリストにします。さらに分割したものをforループで回してprint()としたらこんな感じになりましたが、ここらへんが限界でした。本当はrjust,ljustあたりを使って綺麗にそろえてファイルに保存したかったです。
UWSCで指定したウインドウ以外をすべて閉じるコード
上の画像を見てみるとsystemtray_mainなどと書かれていると思います。これが「ウインドウのクラス」になるみたいです。そしてこのウインドウのクラスをuwscの条件分岐構文にいれます。閉じたくないプログラムのクラスがマッチしていた場合はスキップしています。
//開いているウインドウを全て閉じる //全てのウインドウidをゲット(all_win_id[]変数に入る) for i = 0 to getallwin()-1 if status(all_win_id[i], st_class) = "shell_traywnd" then continue// タスクバーはスキップ if status(all_win_id[i], st_class) = "chrome_widgetwin_1" then continue if status(all_win_id[i], st_class) = "qt5qwindowicon" then continue if status(all_win_id[i], st_visible) then ctrlwin(all_win_id[i], close)//この構文で全てのウインドウを閉じる next
緑色の文字が「ウインドウのクラス」ですからこれをcontinueでスキップすればそのウインドウは閉じません。ですのでまず、ウインドウのクラス名を調べて、全てのウインドウを閉じるプログラムに条件を入れる感じです。
UWSCの問題点
画像を見てもわかるとおり、あまりウインドウを開いてない場合でもウインドウの数は63個もあります。
つまり、プログラムを実行すると目に見えないウインドウを閉じることになります。プログラムを実行しても大きな問題なることはありませんが、どこかに異常が出る可能性はあります。(プログラムが原因かわからないがブルースクリーンの経験あり。)
ですから、あまり細かいことを気にしない人にはおすすめです。
pythonでウインドウを閉じられないか、情報を探していたのですが、なかなか見つかりませんでした。ですので今回はuwscネタをとりあつかってみました。uwscは大文字でコードを書く慣習があるみたいですが、今回記載しているコードはわざわざ小文字に変換しております。「ウインドウクラス名」は大文字小文字を判別する可能性があるので、そこだけ注意していただきたいです。
コメント