2016-11-13 11 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を1つの整数にします。

下位16ビットワードdwKeysは、さまざまな仮想キーがダウンしているかどうかを示します。

上位16ビットワードは2つのフィールドをパックします。上位4ビットのuDeviceは、入力イベントを生成している入力デバイスを指定します。下位12ビットのcmdには、アプリケーションコマンドが含まれています。

65536で乗算することは、16ビットで16ビット左にシフトすることと同じです(65536 = 0x10000は16進数なので)。したがって、APPCOMMAND_VOLUME_UP * 65536でメッセージを送信する場合、cmdAPPCOMMAND_VOLUME_UPuDevicedwKeysは両方ともゼロです。

+0

Ohhh!ありがとうございました! – Noitidart

関連する問題