#include "StdAfx.h" #include "AutoFunc.h" #include "Common_Funcs.h" #include "WindFuncs.h" #include "Hid_UI.h" extern Hid_UI g_hid; InputCmds::InputCmds(void) { } InputCmds::~InputCmds(void) { } BOOL InputCmds::NotifyParentHitButton(HWND wnd) { LPARAM lp = (LPARAM)wnd; HWND Parent = WindFuncs::GetTrueParent(wnd); PostMessage(Parent, WM_COMMAND, MAKELPARAM(GetDlgCtrlID(wnd),BN_CLICKED), lp); return TRUE; } BOOL InputCmds::ClickLB(HWND wnd, BOOL real) { if (real) { g_hid.MouseKey_Hit(MOUSEKEYLEFT); } else { PostMessage(wnd, BM_CLICK, 0, 0); } return TRUE; } BOOL InputCmds::MouseMove(HWND wnd, BOOL real) { RECT rect; GetWindowRect(wnd, &rect); INT x, y, width; x = (rect.left + rect.right) / 2; y = (rect.top + rect.bottom) / 2; width = min((x - rect.left), (y - rect.top)); width -= 2; if (width < 2) { width = 2; } if (real) { InputCmds::MakeFocus(wnd, real); return (g_hid.MoveToPos(x, y, width)); //Input.type = INPUT_MOUSE; //Input.mi.dx = (x + rect.left)*65535 / GetSystemMetrics(SM_CXSCREEN); //Input.mi.dy = (y + rect.top)*65535 / GetSystemMetrics(SM_CYSCREEN); //Input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE; //SendInput(1,&Input,sizeof(INPUT)); } else { PostMessage(wnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y)); } return TRUE; } BOOL InputCmds::MouseMove(HWND wnd,int x,int y,BOOL real) { if(real) { INPUT Input={0}; RECT rect; //InputCmds::MakeFocus(wnd,real); GetWindowRect(wnd,&rect); return (g_hid.MoveToPos(rect.left + x, rect.top + y, 2)); //Input.type = INPUT_MOUSE; //Input.mi.dx = (x + rect.left)*65535 / GetSystemMetrics(SM_CXSCREEN); //Input.mi.dy = (y + rect.top)*65535 / GetSystemMetrics(SM_CYSCREEN); //Input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE; //SendInput(1,&Input,sizeof(INPUT)); } else { PostMessage(wnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y)); } return TRUE; } //MsgType including //WM_LBUTTONDOWN //WM_LBUTTONUP //WM_LBUTTONDBLCLK //RIGHT //... //MIDDLE //... //ExKey including below //MK_CONTROL //MK_LBUTTON //MK_MBUTTON //MK_RBUTTON //MK_SHIFT //normal----------------- //InputCmds::HitMouse(curWind,WM_LBUTTONDBLCLK,MK_LBUTTON,10,10); //InputCmds::HitMouse(curWind,WM_LBUTTONUP,0,10,10); //real----------------- //InputCmds::HitMouse(curWind,MOUSEEVENTF_LEFTDOWN,MK_LBUTTON,10,10); //InputCmds::HitMouse(curWind,MOUSEEVENTF_LEFTUP,0,10,10); BOOL InputCmds::HitMouse(HWND wnd,DWORD MsgType,DWORD ExKey,int x,int y,BOOL real) { InputCmds::MouseMove(wnd, x, y, real); if(real) { InputCmds::MakeFocus(wnd,real); //INPUT Input={0}; //Input.type = INPUT_MOUSE; switch(MsgType) { case WM_LBUTTONDOWN: //MsgType = MOUSEEVENTF_LEFTDOWN; return g_hid.MouseKey_Down(MOUSEKEYLEFT); break; case WM_LBUTTONUP: //MsgType = MOUSEEVENTF_LEFTUP; return g_hid.MouseKey_Up(MOUSEKEYLEFT); break; case WM_LBUTTONDBLCLK: { g_hid.MouseKey_Hit(MOUSEKEYLEFT); Sleep(100); g_hid.MouseKey_Hit(MOUSEKEYLEFT); //Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; //SendInput(1,&Input,sizeof(INPUT)); //Sleep(10); //Input.mi.dwFlags = MOUSEEVENTF_LEFTUP; //SendInput(1,&Input,sizeof(INPUT)); //Sleep(50); //Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; //SendInput(1,&Input,sizeof(INPUT)); //Sleep(10); //Input.mi.dwFlags = MOUSEEVENTF_LEFTUP; //SendInput(1,&Input,sizeof(INPUT)); //Sleep(50); return TRUE; } case WM_RBUTTONDOWN: //MsgType = MOUSEEVENTF_RIGHTDOWN; return g_hid.MouseKey_Down(MOUSEKEYRIGHT); break; case WM_RBUTTONUP: //MsgType = MOUSEEVENTF_RIGHTUP; return g_hid.MouseKey_Up(MOUSEKEYRIGHT); break; case WM_RBUTTONDBLCLK: { g_hid.MouseKey_Hit(MOUSEKEYRIGHT); Sleep(100); g_hid.MouseKey_Hit(MOUSEKEYRIGHT); //Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN; //SendInput(1,&Input,sizeof(INPUT)); //Sleep(10); //Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP; //SendInput(1,&Input,sizeof(INPUT)); //Sleep(50); //Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN; //SendInput(1,&Input,sizeof(INPUT)); //Sleep(10); //Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP; //SendInput(1,&Input,sizeof(INPUT)); //Sleep(50); return TRUE; } case WM_MBUTTONDOWN: //MsgType = MOUSEEVENTF_MIDDLEDOWN; return g_hid.MouseKey_Down(MOUSEKEYMIDDLE); break; case WM_MBUTTONUP: //MsgType = MOUSEEVENTF_MIDDLEUP; return g_hid.MouseKey_Up(MOUSEKEYMIDDLE); break; } //Input.mi.dwFlags = MsgType; //SendInput(1,&Input,sizeof(INPUT)); //Sleep(50); } else { PostMessage(wnd, MsgType, ExKey, MAKELPARAM(x, y)); Sleep(50); } return TRUE; } void SendAscii(wchar_t data, BOOL shift) { INPUT input[2]; memset(input, 0, 2 * sizeof(INPUT)); if (shift) { input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = VK_SHIFT; SendInput(1, input, sizeof(INPUT)); Sleep(50); } input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = data; SendInput(1, input, sizeof(INPUT)); Sleep(50); input[1].type = INPUT_KEYBOARD; input[1].ki.wVk = data; input[1].ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1, &input[1], sizeof(INPUT)); Sleep(50); if (shift) { input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = VK_SHIFT; input[0].ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1, input, sizeof(INPUT)); Sleep(50); } } void SendUnicode(wchar_t data) { INPUT input[2]; memset(input, 0, 2 * sizeof(INPUT)); input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = 0; input[0].ki.wScan = data; input[0].ki.dwFlags = 0x4;//KEYEVENTF_UNICODE; SendInput(1, input, sizeof(INPUT)); Sleep(50); input[1].type = INPUT_KEYBOARD; input[1].ki.wVk = 0; input[1].ki.wScan = data; input[1].ki.dwFlags = KEYEVENTF_KEYUP | 0x4;//KEYEVENTF_UNICODE; SendInput(1, &input[1], sizeof(INPUT)); Sleep(50); } //为方便使用,下面这个函数包装了前两个函数。 void InputCmds::SendKeysReal(TCHAR *msg) { g_hid.InputAsciiString(msg); //short vk; //BOOL shift; //USES_CONVERSION; //wchar_t* data = (wchar_t*)msg; //int len = (int)wcslen(data); //for(int i=0;i=0 && data[i]<256) //ascii字符 // { // vk = VkKeyScanW(data[i]); // if (vk == -1) // { // SendUnicode(data[i]); // } // else // { // if (vk < 0) // { // vk = ~vk + 0x1; // } // shift = vk >> 8 & 0x1; // if (GetKeyState(VK_CAPITAL) & 0x1) // { // if ((data[i]>='a' && data[i]<='z') || (data[i]>='A' && data[i]<='Z')) // { // shift = !shift; // } // } // SendAscii(vk & 0xFF, shift); // } // } // else //unicode字符 // { // SendUnicode(data[i]); // } //} } BOOL InputCmds::MakeFocusOfThis(HWND wnd,BOOL real) { AttachThreadInput( ::GetWindowThreadProcessId((wnd),NULL), //当前焦点窗口的线程ID ::GetCurrentThreadId(), //自己的线程ID TRUE); if(real) { SetForegroundWindow((wnd)); BringWindowToTop((wnd)); } SetFocus(wnd); return TRUE; } BOOL InputCmds::MakeFocus(HWND wnd,BOOL real) { AttachThreadInput( ::GetWindowThreadProcessId((wnd),NULL), //当前焦点窗口的线程ID ::GetCurrentThreadId(), //自己的线程ID TRUE); if(real) { SetForegroundWindow(WindFuncs::GetTrueParent(wnd)); BringWindowToTop(WindFuncs::GetTrueParent(wnd)); } SetFocus(wnd); return TRUE; } #pragma warning(push) #pragma warning(disable:4224) #pragma warning(disable:4244) //BOOL InputCmds::HitVKey(HWND wnd,DWORD vk,BOOL real) //{ // InputCmds::MakeFocusOfThis(wnd,real); // if(real) // { // // INPUT input[2]; // WORD wScan = MapVirtualKey(vk, 0); // //vk = (DWORD)VkKeyScan(vk); // memset(input, 0, 2 * sizeof(INPUT)); // input[0].type = INPUT_KEYBOARD; // input[0].ki.wVk = (WORD)vk; // input[0].ki.wScan = wScan; // SendInput(1, input, sizeof(INPUT)); // Sleep(50); // // input[1].type = INPUT_KEYBOARD; // input[1].ki.wVk = (WORD)vk; // input[0].ki.wScan = wScan; // input[1].ki.dwFlags = KEYEVENTF_KEYUP; // // SendInput(1, &input[1], sizeof(INPUT)); // Sleep(50); // } // else // { // SHORT tmp = (SHORT)(vk); // WPARAM wParam = tmp & 0x00FF; // LPARAM lParam = 1; // lParam += MapVirtualKey(wParam, MAPVK_VK_TO_VSC) << 16; // //bool shift = (tmp & 0x0100) == 0x0100 ? true : false; // PostMessage(wnd, WM_SYSKEYDOWN, wParam, lParam); // // Sleep(50); // // lParam += 1 << 30; // //lParam += 1 << 31; // PostMessage(wnd, WM_SYSKEYUP, wParam, lParam); // Sleep(50); // // } // // // return TRUE; //} BOOL InputCmds::HitKey(HWND wnd,DWORD vk,BOOL real) { if(real) { InputCmds::MakeFocus(wnd,real); Sleep(100); return g_hid.Key_Hit(vk); //InputCmds::MakeFocus(wnd,real); //INPUT input[2]; ////vk = (DWORD)VkKeyScan(vk); //memset(input, 0, 2 * sizeof(INPUT)); //input[0].type = INPUT_KEYBOARD; //input[0].ki.wVk = (WORD)vk; //SendInput(1, input, sizeof(INPUT)); //Sleep(50); //input[1].type = INPUT_KEYBOARD; //input[1].ki.wVk = (WORD)vk; //input[1].ki.dwFlags = KEYEVENTF_KEYUP; //SendInput(1, &input[1], sizeof(INPUT)); //Sleep(50); } else { InputCmds::MakeFocus(wnd,real); Sleep(100); //SHORT tmp = (SHORT)VkKeyScan((CHAR)vk); //WPARAM wParam = tmp & 0xFF; //LPARAM lParam = 1; //lParam += MapVirtualKey(wParam, MAPVK_VK_TO_VSC) << 16; //bool shift = (tmp & 0x0100) == 0x0100 ? true : false; //SendMessage(wnd, WM_KEYDOWN, wParam, lParam); //Sleep(50); //lParam += 1 << 30; //lParam += 1 << 31; //SendMessage(wnd, WM_KEYUP, wParam, lParam); //Sleep(50); SendMessage(wnd, WM_KEYDOWN, vk, 0); Sleep(50); SendMessage(wnd, WM_KEYUP, vk, 0); } return TRUE; } #pragma warning(pop) BOOL InputCmds::SetText(HWND Wnd,TCHAR *pContext,BOOL real) { if(real) { //WCHAR szText[256] = { 0 }; //if (GetWcharFromChar(szText, 256, pContext)) { InputCmds::MakeFocus(Wnd, real); InputCmds::SendKeysReal(pContext); } } else { SendMessage(Wnd,WM_SETTEXT,0,(LPARAM)pContext); } return TRUE; }