BOOL IsExtenKey(UINT vk_Code)
{
BOOL bRet = FALSE;
switch(vk_Code)
{
default:
break;
case(VK_NUMLOCK):
case(VK_CAPITAL):
case(VK_SCROLL):
case(VK_CONTROL):
case(VK_LCONTROL):
case(VK_RCONTROL):
case(VK_SHIFT):
case(VK_LSHIFT):
case(VK_RSHIFT):
case(VK_MENU):
case(VK_LMENU):
case(VK_RMENU):
bRet |= TRUE;
}
return bRet;
}
BOOL SimKeyboard(UINT vkCode, UINT sCode/*=-1*/) //模拟键盘
{
if(sCode == -1)
sCode = MapVirtualKey( vkCode, 0); //map virtual keybo to scan code
DWORD dwFlage = 0;
if(IsExtenKey(vkCode))
dwFlage |= KEYEVENTF_EXTENDEDKEY;
keybd_event( vkCode, sCode, dwFlage, 0 );// Simulate a key press
keybd_event( vkCode, sCode, dwFlage | KEYEVENTF_KEYUP, 0 );// Simulate a key up
return (true);
}
BOOL SimKeyboard(UINT vkCode, UINT sCode/*=-1*/) //模拟键盘
{
INPUT kbInput[2] = {0};
kbInput[0].type = INPUT_KEYBOARD; //键盘按下
kbInput[0].ki.wVk = vkCode; //
kbInput[0].ki.wScan = (sCode == -1)? MapVirtualKey( vkCode, 0) : sCode ; //map virtual keybo to scan code
kbInput[0].ki.dwFlags = 0;
if(IsExtenKey(vkCode))
kbInput[0].ki.dwFlags |= KEYEVENTF_EXTENDEDKEY;
if(sCode != -1)
kbInput[0].ki.dwFlags |= KEYEVENTF_SCANCODE;
kbInput[1] = kbInput[0]; //键盘抬起
kbInput[1].ki.dwFlags |= KEYEVENTF_KEYUP;
return SendInput(2, kbInput, sizeof(INPUT));
}
BOOL SimKeyboardPress(UINT vkCode, UINT sCode=-1) //模拟键盘按下
{
if(sCode == -1)
sCode = MapVirtualKey( vkCode, 0); //map virtual keybo to scan code
DWORD dwFlage = 0;
if(IsExtenKey(vkCode))
dwFlage |= KEYEVENTF_EXTENDEDKEY;
keybd_event( vkCode, sCode, dwFlage, 0 );// Simulate a key press
return (true);
}
BOOL SimKeyboardRelease(UINT vkCode, UINT sCode=-1)//模拟键盘抬起
{
if(sCode == -1)
sCode = MapVirtualKey( vkCode, 0); //map virtual keybo to scan code
DWORD dwFlage = KEYEVENTF_KEYUP;
if(IsExtenKey(vkCode))
dwFlage |= KEYEVENTF_EXTENDEDKEY;
keybd_event( vkCode, sCode, dwFlage, 0 );// Simulate a key up
return (true);
}
BOOL SimKeyboardClick(UINT vkCode, UINT sCode=-1)//模拟敲击键盘
{
return SimKeyboardPress(vkCode, sCode)
&& SimKeyboardRelease(vkCode, sCode);
}