65,186
社区成员




#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>
void EmulateLWinDV1(void)
{
UINT uVSCOfLWin = MapVirtualKey(VK_LWIN, MAPVK_VK_TO_VSC_EX);
UINT uVSCOfD = MapVirtualKey('D', MAPVK_VK_TO_VSC_EX);
// LWin down
keybd_event(VK_LWIN, uVSCOfLWin,
KEYEVENTF_EXTENDEDKEY | 0, 0);
// 'D' down
keybd_event('D', uVSCOfD,
KEYEVENTF_EXTENDEDKEY | 0, 0);
// 'D' up
keybd_event('D', uVSCOfD,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
// LWin up
keybd_event(VK_LWIN, uVSCOfLWin,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
void EmulateLWinDV2(void)
{
INPUT keyPress;
keyPress.type = INPUT_KEYBOARD;
keyPress.ki.time = 0;
keyPress.ki.dwExtraInfo = GetMessageExtraInfo();
/// down
keyPress.ki.dwFlags = 0;
// LWin down
keyPress.ki.wVk = VK_LWIN;
SendInput(1, &keyPress, sizeof(keyPress));
// 'D' down
keyPress.ki.wVk = 'D';
SendInput(1, &keyPress, sizeof(keyPress));
/// up
keyPress.ki.dwFlags = KEYEVENTF_KEYUP;
// 'D' up
SendInput(1, &keyPress, sizeof(keyPress));
// LWin up
keyPress.ki.wVk = VK_LWIN;
SendInput(1, &keyPress, sizeof(keyPress));
}
int _tmain(int argc, _TCHAR **argv)
{
#if 0
EmulateLWinDV1();
#else
EmulateLWinDV2();
#endif
return 0;
}
而且SendInput可以让你把一系列按键操作放到一个数组中,然后调用一次SendInput发送出去。