以下のようなプログラムなのですが、うまくいくときと行かないときがあります。
メモ帳のような単一のexeで動いているプログラムは終了できるのですが、その他のアプリは終了できないようです。以下のコードでは、PostMessageを使っていますがDestroyWindowやTerminateProcessなども使ってみましたが無理のようです。まるでメッセージを送っても処理する気が無いように...
このプログラムのどこがおかしいか指摘していただけると嬉しいです。
#include<Windows.h>
#include<thread>
using namespace std;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR CmdLine, int CmdShow) {
MSG msg;
LPSTR lpStr = 0;
while (TRUE) {
if (GetAsyncKeyState(VK_CONTROL) < 0 && GetAsyncKeyState(VK_DELETE) < 0) {
HWND hWnd = GetForegroundWindow();
if (hWnd == NULL) {
MessageBox(hWnd, "ウィンドウを閉じることができませんでした", "エラー", MB_ICONERROR);
}
else {
if (SendNotifyMessage(hWnd, WM_DESTROY, 0, 0) == 0) {
MessageBox(hWnd, "ウィンドウを閉じることができませんでした", "エラー", MB_ICONERROR);
}
else this_thread::sleep_for(chrono::milliseconds(300)); //複数ウィンドウを閉じてしまうの防止
}
}
if (GetAsyncKeyState(VK_CONTROL) < 0 && GetAsyncKeyState('Q') < 0) {
HWND hWnd = GetForegroundWindow();
int ret = MessageBox(hWnd, "終了しますか?", "ウィンドウ操作", MB_ICONINFORMATION | MB_YESNO);
if (ret == IDYES)break;
}
this_thread::sleep_for(chrono::milliseconds(3)); //負荷を軽くするため?に少し止める
}
return 0;
}