私はGF用のホットキーを使ってシステムマスターボリュームを制御する小さなユーティリティアプリを作成しています。その理由は何らかの理由でそのようなファンクションキーがないからです。私はかなりすぐにコードを書き上げて、主な機能は完璧に動作しています。しかし、私はウィンドウを作成していないので(WM_HOTKEYメッセージを処理するメッセージループ)、私はプロセスを無慈悲に終了するよりもエレガントな方法でアプリケーションを終了できません(また、システムがシャットダウンしているときウィンドウタイトルが通常あるところにゴミが入ったウィンドウを "終了するか、今すぐ終了するか"を示しています)。WinAPIでウィンドウレスのアプリケーションを正常に終了する
WM_CLOSEメッセージを傍受するだけのために偽のウィンドウを作成する必要がない方法はありますか?
はここのコードです(私は意図的にミキサ制御機能を残し、彼らは質問とは無関係です):事前に
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) {
MSG msg;
int step;
MixerInfo_t mi;
HANDLE mutex;
mutex = CreateMutex(NULL, TRUE, "volhotkey");
if (mutex == NULL)
return 1;
if (GetLastError() == ERROR_ALREADY_EXISTS)
return 0;
RegisterHotKey(NULL, 1, MOD_ALT | MOD_CONTROL, VK_F5);
RegisterHotKey(NULL, 2, MOD_ALT | MOD_CONTROL, VK_F6);
RegisterHotKey(NULL, 3, MOD_ALT | MOD_CONTROL, VK_F7);
mi = GetMixerControls();
step = (mi.maxVolume - mi.minVolume)/20;
while (GetMessage(&msg, NULL, 0, 0)) {
switch (msg.message) {
case WM_HOTKEY:
switch (msg.wParam) {
case 1:
AdjustVolume(&mi, -step);
break;
case 2:
AdjustVolume(&mi, step);
break;
case 3:
SetMute(&mi, !IsMuted(&mi));
break;
}
MessageBeep(MB_ICONASTERISK);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
break;
}
}
UnregisterHotKey(NULL, 1);
UnregisterHotKey(NULL, 2);
return msg.wParam;
}
感謝を!
ああ、レコードの場合、WM_DESTROYも決して転記されません。
ラップトップの製造元のサポートサイトで、そのようなユーティリティがすでに提供されているかどうか確認しましたか? – Ferruccio
私は持っていますが、彼らはしません。これはHP nx6110であり、すでに質問に記載されているようにボタンがありません。 – IneQuation