InputCmds.cpp 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  1. #include "StdAfx.h"
  2. #include "AutoFunc.h"
  3. #include "Common_Funcs.h"
  4. #include "WindFuncs.h"
  5. #include "Hid_UI.h"
  6. extern Hid_UI g_hid;
  7. InputCmds::InputCmds(void)
  8. {
  9. }
  10. InputCmds::~InputCmds(void)
  11. {
  12. }
  13. BOOL InputCmds::NotifyParentHitButton(HWND wnd)
  14. {
  15. LPARAM lp = (LPARAM)wnd;
  16. HWND Parent = WindFuncs::GetTrueParent(wnd);
  17. PostMessage(Parent,
  18. WM_COMMAND,
  19. MAKELPARAM(GetDlgCtrlID(wnd),BN_CLICKED),
  20. lp);
  21. return TRUE;
  22. }
  23. BOOL InputCmds::ClickLB(HWND wnd, BOOL real)
  24. {
  25. if (real)
  26. {
  27. g_hid.MouseKey_Hit(MOUSEKEYLEFT);
  28. }
  29. else
  30. {
  31. PostMessage(wnd, BM_CLICK, 0, 0);
  32. }
  33. return TRUE;
  34. }
  35. BOOL InputCmds::MouseMove(HWND wnd, BOOL real)
  36. {
  37. RECT rect;
  38. GetWindowRect(wnd, &rect);
  39. INT x, y, width;
  40. x = (rect.left + rect.right) / 2;
  41. y = (rect.top + rect.bottom) / 2;
  42. width = min((x - rect.left), (y - rect.top));
  43. width -= 2;
  44. if (width < 2)
  45. {
  46. width = 2;
  47. }
  48. if (real)
  49. {
  50. InputCmds::MakeFocus(wnd, real);
  51. return (g_hid.MoveToPos(x, y, width));
  52. //Input.type = INPUT_MOUSE;
  53. //Input.mi.dx = (x + rect.left)*65535 / GetSystemMetrics(SM_CXSCREEN);
  54. //Input.mi.dy = (y + rect.top)*65535 / GetSystemMetrics(SM_CYSCREEN);
  55. //Input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
  56. //SendInput(1,&Input,sizeof(INPUT));
  57. }
  58. else
  59. {
  60. PostMessage(wnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y));
  61. }
  62. return TRUE;
  63. }
  64. BOOL InputCmds::MouseMove(HWND wnd,int x,int y,BOOL real)
  65. {
  66. if(real)
  67. {
  68. INPUT Input={0};
  69. RECT rect;
  70. //InputCmds::MakeFocus(wnd,real);
  71. GetWindowRect(wnd,&rect);
  72. return (g_hid.MoveToPos(rect.left + x, rect.top + y, 2));
  73. //Input.type = INPUT_MOUSE;
  74. //Input.mi.dx = (x + rect.left)*65535 / GetSystemMetrics(SM_CXSCREEN);
  75. //Input.mi.dy = (y + rect.top)*65535 / GetSystemMetrics(SM_CYSCREEN);
  76. //Input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
  77. //SendInput(1,&Input,sizeof(INPUT));
  78. }
  79. else
  80. {
  81. PostMessage(wnd, WM_MOUSEMOVE, 0, MAKELPARAM(x, y));
  82. }
  83. return TRUE;
  84. }
  85. //MsgType including
  86. //WM_LBUTTONDOWN
  87. //WM_LBUTTONUP
  88. //WM_LBUTTONDBLCLK
  89. //RIGHT
  90. //...
  91. //MIDDLE
  92. //...
  93. //ExKey including below
  94. //MK_CONTROL
  95. //MK_LBUTTON
  96. //MK_MBUTTON
  97. //MK_RBUTTON
  98. //MK_SHIFT
  99. //normal-----------------
  100. //InputCmds::HitMouse(curWind,WM_LBUTTONDBLCLK,MK_LBUTTON,10,10);
  101. //InputCmds::HitMouse(curWind,WM_LBUTTONUP,0,10,10);
  102. //real-----------------
  103. //InputCmds::HitMouse(curWind,MOUSEEVENTF_LEFTDOWN,MK_LBUTTON,10,10);
  104. //InputCmds::HitMouse(curWind,MOUSEEVENTF_LEFTUP,0,10,10);
  105. BOOL InputCmds::HitMouse(HWND wnd,DWORD MsgType,DWORD ExKey,int x,int y,BOOL real)
  106. {
  107. InputCmds::MouseMove(wnd, x, y, real);
  108. if(real)
  109. {
  110. InputCmds::MakeFocus(wnd,real);
  111. //INPUT Input={0};
  112. //Input.type = INPUT_MOUSE;
  113. switch(MsgType)
  114. {
  115. case WM_LBUTTONDOWN:
  116. //MsgType = MOUSEEVENTF_LEFTDOWN;
  117. return g_hid.MouseKey_Down(MOUSEKEYLEFT);
  118. break;
  119. case WM_LBUTTONUP:
  120. //MsgType = MOUSEEVENTF_LEFTUP;
  121. return g_hid.MouseKey_Up(MOUSEKEYLEFT);
  122. break;
  123. case WM_LBUTTONDBLCLK:
  124. {
  125. g_hid.MouseKey_Hit(MOUSEKEYLEFT);
  126. Sleep(100);
  127. g_hid.MouseKey_Hit(MOUSEKEYLEFT);
  128. //Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
  129. //SendInput(1,&Input,sizeof(INPUT));
  130. //Sleep(10);
  131. //Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
  132. //SendInput(1,&Input,sizeof(INPUT));
  133. //Sleep(50);
  134. //Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
  135. //SendInput(1,&Input,sizeof(INPUT));
  136. //Sleep(10);
  137. //Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
  138. //SendInput(1,&Input,sizeof(INPUT));
  139. //Sleep(50);
  140. return TRUE;
  141. }
  142. case WM_RBUTTONDOWN:
  143. //MsgType = MOUSEEVENTF_RIGHTDOWN;
  144. return g_hid.MouseKey_Down(MOUSEKEYRIGHT);
  145. break;
  146. case WM_RBUTTONUP:
  147. //MsgType = MOUSEEVENTF_RIGHTUP;
  148. return g_hid.MouseKey_Up(MOUSEKEYRIGHT);
  149. break;
  150. case WM_RBUTTONDBLCLK:
  151. {
  152. g_hid.MouseKey_Hit(MOUSEKEYRIGHT);
  153. Sleep(100);
  154. g_hid.MouseKey_Hit(MOUSEKEYRIGHT);
  155. //Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
  156. //SendInput(1,&Input,sizeof(INPUT));
  157. //Sleep(10);
  158. //Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
  159. //SendInput(1,&Input,sizeof(INPUT));
  160. //Sleep(50);
  161. //Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
  162. //SendInput(1,&Input,sizeof(INPUT));
  163. //Sleep(10);
  164. //Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
  165. //SendInput(1,&Input,sizeof(INPUT));
  166. //Sleep(50);
  167. return TRUE;
  168. }
  169. case WM_MBUTTONDOWN:
  170. //MsgType = MOUSEEVENTF_MIDDLEDOWN;
  171. return g_hid.MouseKey_Down(MOUSEKEYMIDDLE);
  172. break;
  173. case WM_MBUTTONUP:
  174. //MsgType = MOUSEEVENTF_MIDDLEUP;
  175. return g_hid.MouseKey_Up(MOUSEKEYMIDDLE);
  176. break;
  177. }
  178. //Input.mi.dwFlags = MsgType;
  179. //SendInput(1,&Input,sizeof(INPUT));
  180. //Sleep(50);
  181. }
  182. else
  183. {
  184. PostMessage(wnd, MsgType, ExKey, MAKELPARAM(x, y));
  185. Sleep(50);
  186. }
  187. return TRUE;
  188. }
  189. void SendAscii(wchar_t data, BOOL shift)
  190. {
  191. INPUT input[2];
  192. memset(input, 0, 2 * sizeof(INPUT));
  193. if (shift)
  194. {
  195. input[0].type = INPUT_KEYBOARD;
  196. input[0].ki.wVk = VK_SHIFT;
  197. SendInput(1, input, sizeof(INPUT));
  198. Sleep(50);
  199. }
  200. input[0].type = INPUT_KEYBOARD;
  201. input[0].ki.wVk = data;
  202. SendInput(1, input, sizeof(INPUT));
  203. Sleep(50);
  204. input[1].type = INPUT_KEYBOARD;
  205. input[1].ki.wVk = data;
  206. input[1].ki.dwFlags = KEYEVENTF_KEYUP;
  207. SendInput(1, &input[1], sizeof(INPUT));
  208. Sleep(50);
  209. if (shift)
  210. {
  211. input[0].type = INPUT_KEYBOARD;
  212. input[0].ki.wVk = VK_SHIFT;
  213. input[0].ki.dwFlags = KEYEVENTF_KEYUP;
  214. SendInput(1, input, sizeof(INPUT));
  215. Sleep(50);
  216. }
  217. }
  218. void SendUnicode(wchar_t data)
  219. {
  220. INPUT input[2];
  221. memset(input, 0, 2 * sizeof(INPUT));
  222. input[0].type = INPUT_KEYBOARD;
  223. input[0].ki.wVk = 0;
  224. input[0].ki.wScan = data;
  225. input[0].ki.dwFlags = 0x4;//KEYEVENTF_UNICODE;
  226. SendInput(1, input, sizeof(INPUT));
  227. Sleep(50);
  228. input[1].type = INPUT_KEYBOARD;
  229. input[1].ki.wVk = 0;
  230. input[1].ki.wScan = data;
  231. input[1].ki.dwFlags = KEYEVENTF_KEYUP | 0x4;//KEYEVENTF_UNICODE;
  232. SendInput(1, &input[1], sizeof(INPUT));
  233. Sleep(50);
  234. }
  235. //为方便使用,下面这个函数包装了前两个函数。
  236. void InputCmds::SendKeysReal(TCHAR *msg)
  237. {
  238. g_hid.InputAsciiString(msg);
  239. //short vk;
  240. //BOOL shift;
  241. //USES_CONVERSION;
  242. //wchar_t* data = (wchar_t*)msg;
  243. //int len = (int)wcslen(data);
  244. //for(int i=0;i<len;i++)
  245. //{
  246. // if (data[i]>=0 && data[i]<256) //ascii字符
  247. // {
  248. // vk = VkKeyScanW(data[i]);
  249. // if (vk == -1)
  250. // {
  251. // SendUnicode(data[i]);
  252. // }
  253. // else
  254. // {
  255. // if (vk < 0)
  256. // {
  257. // vk = ~vk + 0x1;
  258. // }
  259. // shift = vk >> 8 & 0x1;
  260. // if (GetKeyState(VK_CAPITAL) & 0x1)
  261. // {
  262. // if ((data[i]>='a' && data[i]<='z') || (data[i]>='A' && data[i]<='Z'))
  263. // {
  264. // shift = !shift;
  265. // }
  266. // }
  267. // SendAscii(vk & 0xFF, shift);
  268. // }
  269. // }
  270. // else //unicode字符
  271. // {
  272. // SendUnicode(data[i]);
  273. // }
  274. //}
  275. }
  276. BOOL InputCmds::MakeFocusOfThis(HWND wnd,BOOL real)
  277. {
  278. AttachThreadInput(
  279. ::GetWindowThreadProcessId((wnd),NULL), //当前焦点窗口的线程ID
  280. ::GetCurrentThreadId(), //自己的线程ID
  281. TRUE);
  282. if(real)
  283. {
  284. SetForegroundWindow((wnd));
  285. BringWindowToTop((wnd));
  286. }
  287. SetFocus(wnd);
  288. return TRUE;
  289. }
  290. BOOL InputCmds::MakeFocus(HWND wnd,BOOL real)
  291. {
  292. AttachThreadInput(
  293. ::GetWindowThreadProcessId((wnd),NULL), //当前焦点窗口的线程ID
  294. ::GetCurrentThreadId(), //自己的线程ID
  295. TRUE);
  296. if(real)
  297. {
  298. SetForegroundWindow(WindFuncs::GetTrueParent(wnd));
  299. BringWindowToTop(WindFuncs::GetTrueParent(wnd));
  300. }
  301. SetFocus(wnd);
  302. return TRUE;
  303. }
  304. #pragma warning(push)
  305. #pragma warning(disable:4224)
  306. #pragma warning(disable:4244)
  307. //BOOL InputCmds::HitVKey(HWND wnd,DWORD vk,BOOL real)
  308. //{
  309. // InputCmds::MakeFocusOfThis(wnd,real);
  310. // if(real)
  311. // {
  312. //
  313. // INPUT input[2];
  314. // WORD wScan = MapVirtualKey(vk, 0);
  315. // //vk = (DWORD)VkKeyScan(vk);
  316. // memset(input, 0, 2 * sizeof(INPUT));
  317. // input[0].type = INPUT_KEYBOARD;
  318. // input[0].ki.wVk = (WORD)vk;
  319. // input[0].ki.wScan = wScan;
  320. // SendInput(1, input, sizeof(INPUT));
  321. // Sleep(50);
  322. //
  323. // input[1].type = INPUT_KEYBOARD;
  324. // input[1].ki.wVk = (WORD)vk;
  325. // input[0].ki.wScan = wScan;
  326. // input[1].ki.dwFlags = KEYEVENTF_KEYUP;
  327. //
  328. // SendInput(1, &input[1], sizeof(INPUT));
  329. // Sleep(50);
  330. // }
  331. // else
  332. // {
  333. // SHORT tmp = (SHORT)(vk);
  334. // WPARAM wParam = tmp & 0x00FF;
  335. // LPARAM lParam = 1;
  336. // lParam += MapVirtualKey(wParam, MAPVK_VK_TO_VSC) << 16;
  337. // //bool shift = (tmp & 0x0100) == 0x0100 ? true : false;
  338. // PostMessage(wnd, WM_SYSKEYDOWN, wParam, lParam);
  339. //
  340. // Sleep(50);
  341. //
  342. // lParam += 1 << 30;
  343. // //lParam += 1 << 31;
  344. // PostMessage(wnd, WM_SYSKEYUP, wParam, lParam);
  345. // Sleep(50);
  346. //
  347. // }
  348. //
  349. //
  350. // return TRUE;
  351. //}
  352. BOOL InputCmds::HitKey(HWND wnd,DWORD vk,BOOL real)
  353. {
  354. if(real)
  355. {
  356. InputCmds::MakeFocus(wnd,real);
  357. Sleep(100);
  358. return g_hid.Key_Hit(vk);
  359. //InputCmds::MakeFocus(wnd,real);
  360. //INPUT input[2];
  361. ////vk = (DWORD)VkKeyScan(vk);
  362. //memset(input, 0, 2 * sizeof(INPUT));
  363. //input[0].type = INPUT_KEYBOARD;
  364. //input[0].ki.wVk = (WORD)vk;
  365. //SendInput(1, input, sizeof(INPUT));
  366. //Sleep(50);
  367. //input[1].type = INPUT_KEYBOARD;
  368. //input[1].ki.wVk = (WORD)vk;
  369. //input[1].ki.dwFlags = KEYEVENTF_KEYUP;
  370. //SendInput(1, &input[1], sizeof(INPUT));
  371. //Sleep(50);
  372. }
  373. else
  374. {
  375. InputCmds::MakeFocus(wnd,real);
  376. Sleep(100);
  377. //SHORT tmp = (SHORT)VkKeyScan((CHAR)vk);
  378. //WPARAM wParam = tmp & 0xFF;
  379. //LPARAM lParam = 1;
  380. //lParam += MapVirtualKey(wParam, MAPVK_VK_TO_VSC) << 16;
  381. //bool shift = (tmp & 0x0100) == 0x0100 ? true : false;
  382. //SendMessage(wnd, WM_KEYDOWN, wParam, lParam);
  383. //Sleep(50);
  384. //lParam += 1 << 30;
  385. //lParam += 1 << 31;
  386. //SendMessage(wnd, WM_KEYUP, wParam, lParam);
  387. //Sleep(50);
  388. SendMessage(wnd, WM_KEYDOWN, vk, 0);
  389. Sleep(50);
  390. SendMessage(wnd, WM_KEYUP, vk, 0);
  391. }
  392. return TRUE;
  393. }
  394. #pragma warning(pop)
  395. BOOL InputCmds::SetText(HWND Wnd,TCHAR *pContext,BOOL real)
  396. {
  397. if(real)
  398. {
  399. //WCHAR szText[256] = { 0 };
  400. //if (GetWcharFromChar(szText, 256, pContext))
  401. {
  402. InputCmds::MakeFocus(Wnd, real);
  403. InputCmds::SendKeysReal(pContext);
  404. }
  405. }
  406. else
  407. {
  408. SendMessage(Wnd,WM_SETTEXT,0,(LPARAM)pContext);
  409. }
  410. return TRUE;
  411. }