回答編集履歴

1

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

2020/04/18 09:55

投稿

argparse
argparse

スコア1017

test CHANGED
@@ -162,16 +162,30 @@
162
162
 
163
163
 
164
164
 
165
- ## 2-x) `conhost.exe` の画面を探して非表示にする
165
+ ## 2-c) `conhost.exe` の画面を探して非表示にする
166
166
 
167
- 因みに、その他の方法としては、 [コンソール画面は `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) によって非表示にしてから終了する** というや方も考えられす。
167
+ `GetConsoleWindow()` の存在を知らず、誤た回答となっりましたので、修正致しました
168
168
 
169
169
 
170
170
 
171
- ただ残念ながら、こ「自分が使用しているコンソール画面」を簡単特定る方法が、では存在せず、
172
-
173
- [Microsoft Docs に記載された方法](https://support.microsoft.com/ja-jp/help/124103/how-to-obtain-a-console-window-handle-hwnd) ですら「`SetConsoleTitle()` でウィンドウ名にユニークな値を与え、それを `FindoWindow()`で探す」という、ちょっとどうなんだと思わざるを得ない実装であり、あまり手軽とは言えません。
171
+ 他の方法としては、 [コンソール画面は `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) によって非表示にしてから終了する** というや方も考えられます。
174
172
 
175
173
 
176
174
 
175
+ ```python
176
+
177
+ import ctypes
178
+
179
+ import subprocess
180
+
181
+
182
+
183
+ console_hwnd = ctypes.windll.kernel32.GetConsoleWindow()
184
+
185
+ ctypes.windll.user32.ShowWindow(console_hwnd, subprocess.SW_HIDE)
186
+
187
+ ```
188
+
189
+
190
+
177
- ただ「開発時は chromedriver や Chrome がコンソールに出力する情報を得ながらも、スクリプトが正常処理を完了したときだけ不要となったコンソール画面を消す」ことが可能といはアドバンテージがあるので、必要応じて実装を検討下さい。
191
+ この方法であれば**スクリプト自身必要な場合のみに不要となったコンソール画面を非表示できる** メリット御座いますが、不用意に実行する、例えば開発作業中に使用してた `cmd.exe` の画面を図せずに消してしまい、操作がきなくなような事故も生じ得ますので、御利用注意下さいませ