我正在尝试控制主音量。我能够成功地做到这一点:
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?文档没有说明这一点。如果我不繁殖,那么它就不起作用。
答案 0 :(得分:8)
对于WM_APPCOMMAND,lParam
参数packs three values在一个整数中。
较低的16位字dwKeys
表示各种虚拟键是否已关闭。
较高的16位字包装有两个字段:最高的4位uDevice
指定生成输入事件的输入设备。低12位cmd
包含应用程序命令。
乘以65536与向左移位16位相同(因为65536 =十六进制的0x10000)。因此,当您使用APPCOMMAND_VOLUME_UP * 65536
发送邮件时,您指定cmd
为APPCOMMAND_VOLUME_UP
,uDevice
和dwKeys
均为零。