teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

`GetConsoleWindow()` を使用した解決案を正しく追記

2020/04/18 09:55

投稿

argparse
argparse

スコア1017

answer CHANGED
@@ -80,10 +80,17 @@
80
80
  但し、これにより [Chrome のログ出力機能](https://www.chromium.org/for-testers/enable-logging) 全体が無効になってしまいますので、その点は御留意頂く必要が御座います。
81
81
 
82
82
 
83
- ## 2-x) `conhost.exe` の画面を探して非表示にする
84
- 因みに、その他の方法としては、 [コンソール画面は `conhost.exe` という別プロセスによって実現されている](https://superuser.com/questions/624270/when-is-conhost-exe-actually-necessary) のですが、 Python スクリプトが **自身の使用している `conhost.exe`画面探し出し [`ShowWindow()` API](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow) によて非表示にしてから終了する** いうや方も考えられす。
83
+ ## 2-c) `conhost.exe` の画面を探して非表示にする
84
+ `GetConsoleWindow()` の存在知らずた回答なっておりましたので、修正致しました
85
85
 
86
- ただ残念ながら、こ「自分が使用しているコンソール画面」を簡単特定す方法が、限りでは存在せず
87
- [Microsoft Docs に記載された方法](https://support.microsoft.com/ja-jp/help/124103/how-to-obtain-a-console-window-handle-hwnd) ですら「`SetConsoleTitle()` でウィンドウ名にユニークな値を与え、それを `FindoWindow()`で探す」という、ちょっとどうなんだと思わざるを得ない実装であり、あまり手軽とは言えません。
86
+ 他の方法としては、 [コンソール画面は `conhost.exe` という別プロセスよって実現されてい](https://superuser.com/questions/624270/when-is-conhost-exe-actually-necessary) のですが、 Python スクリプトが **自身使用してい `conhost.exe` の画面を探し出し [`ShowWindow()` API](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow) によって非表示にしてから終了する** というやり方も考えられます。
88
87
 
88
+ ```python
89
+ import ctypes
90
+ import subprocess
91
+
92
+ console_hwnd = ctypes.windll.kernel32.GetConsoleWindow()
93
+ ctypes.windll.user32.ShowWindow(console_hwnd, subprocess.SW_HIDE)
94
+ ```
95
+
89
- ただ「開発時は chromedriver や Chrome がコンソールに出力する情報を得ながらも、スクリプトが正常処理を完了したときだけ不要となったコンソール画面を消す」ことが可能とい味ではアドバンテージるので、必要応じて実装を検討下さい。
96
+ この方法であれば**スクリプト自身必要な場合のみに不要となったコンソール画面を非表示できる** メリット御座いますが、不用意に実行する、例えば開発作業中に使用してた `cmd.exe` の画面を図せずに消してしまい、操作できなくなような事故も生じ得ますので、御利用注意下さいませ