我有一个 MFC C++ Windows 应用程序,可以处理 VK_VOLUME_DOWN 和 VK_VOLUME_UP 虚拟键来更改音量。但是 Windows 也会更改主音量。
我尝试使用加速器并从 ProcessMessageFilter 返回 TRUE
BOOL CMyApp::ProcessMessageFilter(int code, LPMSG lpMsg)
{
if (::TranslateAccelerator(m_pMainWnd->m_hWnd, m_haccel, lpMsg))
return TRUE;
return CWinApp::ProcessMessageFilter(code, lpMsg);
}
我尝试直接在WindowProc中覆盖WM_KEY_DOWN
LRESULT CMyDlg::WindowProc(
UINT message,
WPARAM wParam,
LPARAM lParam)
{
if (message == WM_KEYDOWN)
{
switch (wParam)
{
case VK_VOLUME_UP:
OnMediaVolumeUp();
return 0;
case VK_VOLUME_DOWN:
OnMediaVolumeDown();
return 0;
}
}
return CDialog::WindowProc(message, wParam, lParam);
}
都不起作用,Windows 在我的应用程序处理消息之前就更改了主音量。
有人建议如何正确处理这个问题吗?
默认处理
VK_VOLUME_DOWN
会生成 WM_APPCOMMAND
,如果应用程序未处理,则会将其转发到资源管理器以调整主音量。
如果您只想让您的应用调节音量,则需要处理
WM_APPCOMMAND
(APPCOMMAND_VOLUME_DOWN
, APPCOMMAND_VOLUME_UP
) 而不是直接处理 WM_KEYDOWN
/WM_KEYUP
。