Я пишу небольшое приложение-утилиту для управления громкостью системы с помощью горячих клавиш для моего 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