防止 Windows 在应用程序处理时响应音量增大和减小键

问题描述 投票:0回答:1

我有一个 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 在我的应用程序处理消息之前就更改了主音量。

有人建议如何正确处理这个问题吗?

c++ winapi visual-c++ mfc
1个回答
0
投票

默认处理

VK_VOLUME_DOWN
会生成
WM_APPCOMMAND
,如果应用程序未处理,则会将其转发到资源管理器以调整主音量。

如果您只想让您的应用调节音量,则需要处理

WM_APPCOMMAND
(
APPCOMMAND_VOLUME_DOWN
,
APPCOMMAND_VOLUME_UP
) 而不是直接处理
WM_KEYDOWN
/
WM_KEYUP

© www.soinside.com 2019 - 2024. All rights reserved.