#include "stdafx.h" #include "Hid_UI.h" #include "AutoFunc.h" Hid_UI g_hid; Hid_UI::Hid_UI() { m_AsciiMap = new map(); InitAsciiMap(); } Hid_UI::~Hid_UI() { m_AsciiMap->clear(); delete m_AsciiMap; m_AsciiMap = NULL; } bool Hid_UI::InitUI() { return InitHid(); } void Hid_UI::InitAsciiMap() { ASCII_NODE node; char code = 'a'; //a - z while (code <= 'z') { node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_A + (code - 'a'); (*m_AsciiMap)[code] = node; ++code; } //A - Z code = 'A'; while (code <= 'Z') { node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_A + (code - 'A'); (*m_AsciiMap)[code] = node; ++code; } //0 code = '0'; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_0; (*m_AsciiMap)[code] = node; //Shift 0 code = ')'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_0; (*m_AsciiMap)[code] = node; //1 - 9 code = '1'; while (code <= '9') { node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_1 + (code - '1'); (*m_AsciiMap)[code] = node; ++code; } //Shift 1 - 9 char sz1To9[9] = { '!', '@', '#','$', '%','^', '&','*', '('}; for (DWORD i = 0; i < 9; i++) { code = sz1To9[i]; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = (unsigned char)(HID_1 + i); (*m_AsciiMap)[code] = node; } //特殊引号,1左 code = '`'; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_TYINH; (*m_AsciiMap)[code] = node; //Shift 特殊引号,1左 code = '~'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_TYINH; (*m_AsciiMap)[code] = node; //其他符号共 10 个 //1.minus code = '-'; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_MINUS; (*m_AsciiMap)[code] = node; //Shift - code = '_'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_MINUS; (*m_AsciiMap)[code] = node; //2.equal code = '='; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_EQUAL; (*m_AsciiMap)[code] = node; //Shift code = '+'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_EQUAL; (*m_AsciiMap)[code] = node; //3.LKUOH code = '['; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_LKUOH; (*m_AsciiMap)[code] = node; //Shift code = '{'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_LKUOH; (*m_AsciiMap)[code] = node; //4.RKUOH code = ']'; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_RKUOH; (*m_AsciiMap)[code] = node; //Shift code = '}'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_RKUOH; (*m_AsciiMap)[code] = node; //5.OR code = '\\'; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_OR; (*m_AsciiMap)[code] = node; //Shift code = '|'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_OR; (*m_AsciiMap)[code] = node; //6.FENH code = ';'; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_FENH; (*m_AsciiMap)[code] = node; //Shift code = ':'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_FENH; (*m_AsciiMap)[code] = node; //7.YINH code = '\''; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_YINH; (*m_AsciiMap)[code] = node; //Shift code = '\"'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_YINH; (*m_AsciiMap)[code] = node; //8.DOUH code = ','; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_DOUH; (*m_AsciiMap)[code] = node; //Shift code = '<'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_DOUH; (*m_AsciiMap)[code] = node; //9.JUH code = '.'; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_JUH; (*m_AsciiMap)[code] = node; //Shift code = '>'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_JUH; (*m_AsciiMap)[code] = node; //10.XIEH code = '/'; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_XIEH; (*m_AsciiMap)[code] = node; //Shift code = '?'; node.AsciiComb.Shift = 1; node.AsciiComb.HidCode = HID_XIEH; (*m_AsciiMap)[code] = node; //Tab code = '\t'; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_TAB; (*m_AsciiMap)[code] = node; //space code = ' '; node.AsciiComb.Shift = 0; node.AsciiComb.HidCode = HID_SPACE; (*m_AsciiMap)[code] = node; } bool Hid_UI::InputAsciiString(const char *pStr,DWORD timeperiod) { bool ret = true; size_t Len = strlen(pStr); map::iterator iter; for (size_t i = 0; i < Len; i++) { iter = (*m_AsciiMap).find(pStr[i]); if (iter != (*m_AsciiMap).end()) { if (iter->second.AsciiComb.Shift) { ret = Key_Down(HID_LEFTSHIFT); } ret &= Key_Hit(iter->second.AsciiComb.HidCode, timeperiod); if (iter->second.AsciiComb.Shift) { ret &= Key_Up(HID_LEFTSHIFT); } if (ret == false) { break; } } } return ret; } bool Hid_UI::MoveToPos(INT X, INT Y, DWORD Radious) { POINT CurPt; DWORD Direction = 1; DWORD JumpDistanceX = MAX_JUMP_DISTANCE; DWORD JumpDistanceY = MAX_JUMP_DISTANCE; INT ORG_JUMPX = 0; INT ORG_JUMPY = 0; do { int cxIcon = GetSystemMetrics(SM_CXSCREEN); int cyIcon = GetSystemMetrics(SM_CYSCREEN); if ((X >= cxIcon) || (Y >= cyIcon)) { return false; } GetCursorPos(&CurPt); DWORD DistanceX = abs(X - CurPt.x); DWORD DistanceY = abs(Y - CurPt.y); BOOL MoveX = (DistanceX > Radious); BOOL MoveY = (DistanceY > Radious); if (MoveX == FALSE && MoveY == FALSE) { return true; } //X INT JUMPX = 0; if (MoveX) { JUMPX = min(JumpDistanceX, DistanceX); if (CurPt.x > X) { JUMPX = -JUMPX; } //需要调整 ORG_JUMPX *= JUMPX; if (ORG_JUMPX < 0) { //cross JumpDistanceX = JumpDistanceX / 2; if (JumpDistanceX == 0) { JumpDistanceX = 1; } } ORG_JUMPX = JUMPX; } //Y INT JUMPY = 0; if (MoveY) { JUMPY = min(JumpDistanceY, DistanceY); if (CurPt.y > Y) { JUMPY = -JUMPY; } //需要调整 ORG_JUMPY *= JUMPY; if (ORG_JUMPY < 0) { //cross JumpDistanceY = JumpDistanceY / 2; if (JumpDistanceY == 0) { JumpDistanceY = 1; } } ORG_JUMPY = JUMPY; } if (Mouse_Move(JUMPX, JUMPY) == false) { break; } Sleep(50); } while (1); return false; }