回答編集履歴
1
`GetConsoleWindow()` を使用した解決案を正しく追記
test
CHANGED
@@ -162,16 +162,30 @@
|
|
162
162
|
|
163
163
|
|
164
164
|
|
165
|
-
## 2-
|
165
|
+
## 2-c) `conhost.exe` の画面を探して非表示にする
|
166
166
|
|
167
|
-
|
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
|
-
|
191
|
+
この方法であれば、 **スクリプト自身が必要な場合のみに不要となったコンソール画面を非表示とできる** メリットが御座いますが、不用意に実行すると、例えば開発作業中に使用していた `cmd.exe` の画面を意図せずに消してしまい、操作ができなくなるような事故も生じ得ますので、御利用には御注意下さいませ。
|