2016-11-13 100 views
3

我試圖控制主音量。我能夠成功地做到這一點:爲什麼WM_APPCOMMAND LPARAM必須乘以65536

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

從源讀取宏 –

回答

7

對於WM_APPCOMMAND,lParam參數packs three values以單個整數表示。

較低的16位字dwKeys指示各種虛擬鍵是否關閉。

較高的16位字包含兩個字段:最高4位uDevice指定生成輸入事件的輸入設備。低12位cmd包含應用程序命令。

乘以65536與向左移位16位相同(因爲65536 = 0x10000以十六進制表示)。因此,當您使用APPCOMMAND_VOLUME_UP * 65536發送郵件時,您指定的cmdAPPCOMMAND_VOLUME_UP,而uDevicedwKeys均爲零。

+0

哦!謝謝Soonts! – Noitidart