1 . MakeKeyLparam 是个函数.
2. MakeKeyLparam 用于构造 消息的 LPARAM
3. MakeKeyLparam 来自VB ?
4. MakeKeyLparam 的简化:
int MakeKeyLparam(/* int VirtualKey ,*/ int flag)
{
UINT sCode;
//Firstbyte ; lparam 参数的 24-31位
UINT Firstbyte;
switch (flag)
{
case WM_KEYDOWN: Firstbyte = 0; break;
case WM_KEYUP: Firstbyte = 0xC0;break;
case WM_CHAR: Firstbyte = 0x20;break;
case WM_SYSKEYDOWN: Firstbyte = 0x20;break;
case WM_SYSKEYUP: Firstbyte = 0xE0;break;
case WM_SYSCHAR: Firstbyte = 0xE0;break;
}
// 键的扫描码; lparam 参数 的 16-23位
// 16–23 Specifies the scan code.
// UINT iKey = MapVirtualKey(VirtualKey, 0);
// 1为 lparam 参数的 0-15位,即发送次数
// 0–15 Specifies the repeat count for the current message.
sCode = (Firstbyte << 24) +1;// + (iKey << 16) + 1;
return sCode;
}
5. MakeKeyLparam 的使用“
发送alt+f 到 notepad:
::PostMessage(hwnd, WM_SYSKEYDOWN, VK_MENU, MakeKeyLparam(WM_SYSKEYDOWN));
::PostMessage(hwnd, WM_SYSKEYDOWN, 'F', MakeKeyLparam(WM_SYSKEYDOWN));
::PostMessage(hwnd, WM_CHAR, 'F', MakeKeyLparam(WM_CHAR));
::PostMessage(hwnd, WM_SYSKEYUP, 'F', MakeKeyLparam(WM_SYSKEYUP));
::PostMessage(hwnd, WM_KEYUP, VK_MENU, MakeKeyLparam(WM_KEYUP));
//