/* 本源码由TC简单软件科技有限公司开源,功能可以自由修改、发布、 长沙简单软件科技有限公司对于源码不做后期维护,,请大家在使用过程中遵循开源协议 */ /////////////////////////////////////// #include "stdafx.h" #include "MyKeyboardNamespace.h" #include #include #include #include /*=================================================================== 构造函数 ====================================================================*/ MyKeyboardNamespace::MyKeyboardNamespace(void) { delaytime = 40; } /*=================================================================== 析构函数 ====================================================================*/ MyKeyboardNamespace::~MyKeyboardNamespace(void) { } /*=================================================================== 函数名称 : keyPressDown 功能描述 : 键盘按下弹起 返回值: 返回值:BOOL类型 _TRUE表示成功,_FALSE表示失败 参数: 名称 类型 描述 ----------------------------------------------- list MyDataList * 键盘按下弹起什么键以及键盘按下弹起具体的次数 ret _variant_t * 接收返回值传出去 修改历史 : 修改者 日期 描述 邓媛元 2010-07-18 邓媛元 2010-07-20 检测 ====================================================================*/ bool MyKeyboardNamespace::keyPress(DWORD keycode) { unsigned char bkeydown = keycode; keybd_event(bkeydown, MapVirtualKey(bkeydown, 0), 0, 0); ::Sleep(delaytime); //2011-11-02 修改按键延时,有人反应按键太慢 keybd_event(bkeydown, MapVirtualKey(bkeydown, 0), KEYEVENTF_KEYUP, 0); //*ret = true; return true; } /*=================================================================== 函数名称 : keyDown 功能描述 : 键盘按下 返回值: 返回值:BOOL类型 _TRUE表示成功,_FALSE表示失败 参数: 名称 类型 描述 ----------------------------------------------- list MyDataList * 键盘按下什么键以及键盘按下具体的次数 ret _variant_t * 接收返回值传出去 修改历史 : 修改者 日期 描述 邓媛元 2010-07-18 邓媛元 2010-07-20 检测 ====================================================================*/ bool MyKeyboardNamespace::keyDown(DWORD keycode) { unsigned char bkeydown = keycode; keybd_event(bkeydown, MapVirtualKey(bkeydown, 0), 0, 0); return true; } /*=================================================================== 函数名称 : keyUp 功能描述 : 键盘松开 返回值: 返回值:BOOL类型 _TRUE表示成功,_FALSE表示失败 参数: 名称 类型 描述 ----------------------------------------------- list MyDataList * 键盘弹起什么键以及键盘弹起的具体次数 ret _variant_t * 接收返回值传出去 修改历史 : 修改者 日期 描述 邓媛元 2010-07-18 邓媛元 2010-07-20 检测 ====================================================================*/ bool MyKeyboardNamespace::keyUp(DWORD keycode) { unsigned char bkeydown = keycode; keybd_event(bkeydown, MapVirtualKey(bkeydown, 0), KEYEVENTF_KEYUP, 0);//放开键  return true; } /*=================================================================== 函数名称 : sendkeyString 功能描述 : 模拟键盘发送字符串 返回值: 返回值:BOOL类型 _TRUE表示成功,_FALSE表示失败 参数: 名称 类型 描述 ----------------------------------------------- list MyDataList * 传进来键盘按下的字符串 ret _variant_t * 接收返回值传出去 修改历史 : 修改者 日期 描述 邓媛元 2010-07-18 邓媛元 2010-07-20 检测 ====================================================================*/ bool MyKeyboardNamespace::sendkeyString(wchar_t* strs, DWORD delays) { int length = wcslen(strs); for (int i = 0; i < length; ++i) { INPUT keyin; keyin.type = INPUT_KEYBOARD; keyin.ki.wVk = 0; keyin.ki.wScan = strs[i]; keyin.ki.time = 100; keyin.ki.dwFlags = KEYEVENTF_UNICODE; keyin.ki.dwExtraInfo = GetMessageExtraInfo(); ::SendInput(1, &keyin, sizeof(INPUT)); Sleep(delays); } return true; } BYTE keyCode[127] = { VK_BACK,VK_TAB,VK_CLEAR,VK_RETURN,VK_SHIFT,VK_CONTROL,VK_MENU,VK_PAUSE,VK_CAPITAL,VK_KANA, //10 VK_JUNJA,VK_FINAL,VK_HANJA,VK_KANJI,VK_ESCAPE,VK_CONVERT,VK_NONCONVERT,VK_ACCEPT,VK_MODECHANGE,VK_SPACE, //10 VK_PRIOR,VK_NEXT,VK_END,VK_HOME,VK_LEFT,VK_UP,VK_RIGHT,VK_DOWN,VK_SELECT,VK_PRINT, //10 VK_EXECUTE,VK_SNAPSHOT,VK_INSERT,VK_DELETE,VK_HELP, //5 '0','1','2','3','4','5','6','7','8','9', //10 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', //26 VK_LWIN,VK_RWIN,VK_APPS,VK_SLEEP,VK_NUMPAD0,VK_NUMPAD1,VK_NUMPAD2,VK_NUMPAD3,VK_NUMPAD4,VK_NUMPAD5, //10 VK_NUMPAD6,VK_NUMPAD7,VK_NUMPAD8,VK_NUMPAD9,VK_MULTIPLY,VK_ADD,VK_SEPARATOR,VK_SUBTRACT,VK_DECIMAL,VK_DIVIDE, //10 VK_F1,VK_F2,VK_F3,VK_F4,VK_F5,VK_F6,VK_F7,VK_F8,VK_F9,VK_F10,VK_F11,VK_F12, //12 VK_NUMLOCK,VK_SCROLL,VK_OEM_NEC_EQUAL,VK_LSHIFT,VK_RSHIFT,VK_LCONTROL,VK_RCONTROL,VK_LMENU,VK_RMENU,VK_OEM_1, //10 VK_OEM_PLUS,VK_OEM_COMMA,VK_OEM_MINUS,VK_OEM_PERIOD,VK_OEM_2,VK_OEM_3,VK_OEM_4,VK_OEM_5,VK_OEM_6,VK_OEM_7, //10 VK_OEM_8,VK_OEM_AX,VK_OEM_102 }; /*=================================================================== 函数名称 : waitkeypress 功能描述 : 暂停程序等待任意按键后继续 返回值: 返回值:BOOL类型 _TRUE表示成功,_FALSE表示失败 参数: 名称 类型 描述 ----------------------------------------------- list MyDataList * 传进来键盘按下的字符串 ret _variant_t * 接收返回值传出去 修改历史 : 修改者 日期 描述 邓媛元 2010-07-18 邓媛元 2010-07-20 检测 ====================================================================*/ bool MyKeyboardNamespace::waitkeypress(DWORD keycode, DWORD delay) { MSG msg; int waittime = 0; if (delay > 0) waittime = delay; int time1 = ::GetTickCount(); while (true) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (WM_QUIT == msg.message) break; TranslateMessage(&msg); DispatchMessage(&msg); } else { if (keycode == 0) { for (int i = 0; i < 127; i++) { if (0x8000 & GetAsyncKeyState(keyCode[i])) { return true; } } } else { if (0x8000 & GetAsyncKeyState(keycode)) { return true; } } if (waittime > 0) { if ((::GetTickCount() - time1) >= waittime) return false; } } ::Sleep(5); } return false; }