「蛭子屋うぃん」ではアプリケーションを強制終了させるコマンドがあります。これは大抵のウィンドウの場合、 WM_CLOSE
を送ることで終了してくれるのですが、リソースメーターなど一部のアプリケーションでは終了してくれません。これらのアプリを無理矢理終了させるためのコマンドです。
実はこれらのウィンドウは往々にして WM_COMMAND
であるコマンドを送ることで終了してくれるのですが、このあるコマンドが外部からでは判りません(リソースを読んだり、SPY++等のツールを使ったり、内部を解析したりすることで調べることはできますが)。
ところが、アプリケーション自体(アプリケーションのプロセス)を強制終了させるAPI、 TerminateProcess
に渡す引数にはプロセスのハンドルが必要です。しかし、 GetWindowThreadProcessId
ではプロセスのIDは取得できますが、ハンドルは得られません。そこで OpenProcess
というAPIを使用します。
(例)指定のウィンドウを持つプロセスを強制終了させる。
- DWORD dwPID;
- DWORD dwTID = ::GetWindowThreadProcessId(hWnd, &dwPID);
- HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
- if (hProcess != NULL)
- ::TerminateProcess(hProcess, (UINT) -1);