我正在编写一个小工具应用程序,可以通过热键控制系统主音量,为我的女友的笔记本电脑提供此类功能键。我很快就编写了代码,并且主要功能完美地运行起来;然而,由于我没有创建任何窗口(只是处理WM_HOTKEY消息的消息循环),所以我无法以更加优雅的方式终止应用程序,而只能不雅地终止进程(还有,当系统关闭时,它会显示“我应该等待进程结束还是现在杀死它”的窗口,在窗口标题通常所在的位置上显示一些垃圾)。
有没有任何方法可以做到这一点,而不涉及创建一个假窗口,仅仅是为了拦截WM_CLOSE消息?
以下是代码(我故意省略了混音控制函数,因为它们与问题无关):
有没有任何方法可以做到这一点,而不涉及创建一个假窗口,仅仅是为了拦截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也从未发布过。