123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504 |
- #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<len;i++)
- //{
- // if (data[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;
- }
|