我试图控制主音量。我能够成功做到这一点:

HWND mainhwnd = CreateWindow(szWindowClass, _T("window-noit-ext-profilist"), 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, wcex.hInstance, NULL);
if (!mainhwnd) {
    MessageBox(NULL, _T("Profilist: Call to CreateWindow failed!"), _T("window-noit-ext-profilist"), NULL);
    return 1;
}


SendMessage(mainhwnd, WM_APPCOMMAND, (WPARAM)mainhwnd, (LPARAM)(APPCOMMAND_VOLUME_MUTE * 65536)); // mute

SendMessage(mainhwnd, WM_APPCOMMAND, (WPARAM)mainhwnd, (LPARAM)(APPCOMMAND_VOLUME_DOWN * 65536)); // vol down

SendMessage(mainhwnd, WM_APPCOMMAND, (WPARAM)mainhwnd, (LPARAM)(APPCOMMAND_VOLUME_UP * 65536)); // vol up

为什么我必须乘以65,536?该文档没有说明这一点。如果我不乘,那就行不通了。

最佳答案

对于WM_APPCOMMAND,lParam参数packs three values以单个整数表示。

低16位字dwKeys指示各种虚拟键是否按下。

高16位字包含两个字段:高4位uDevice指定生成输入事件的输入设备。低12位cmd包含应用程序命令。

乘以65536等于左移16位(因为65536 = 16进制的0x10000)。因此,使用APPCOMMAND_VOLUME_UP * 65536发送消息时,您指定cmdAPPCOMMAND_VOLUME_UP,并且uDevicedwKeys均为零。

08-26 22:56