Pythonでアプリを閉じられないのでUWSCを使ってアプリを閉じる話

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を見ることができます。
uwsc

Pythonで整形して読みやすくする – 読み飛ばしてもOK

uwsc2
テキストファイルを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は大文字でコードを書く慣習があるみたいですが、今回記載しているコードはわざわざ小文字に変換しております。「ウインドウクラス名」は大文字小文字を判別する可能性があるので、そこだけ注意していただきたいです。

コメント

タイトルとURLをコピーしました