Hid_IF.cpp 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. #include "stdafx.h"
  2. #include "Hid_IF.h"
  3. #include "AutoFunc.h"
  4. Hid_IF::Hid_IF()
  5. {
  6. m_KeyStatus = new map<HID_KEY, bool>();
  7. m_MouseKeyStatus = new map<MOUSEKEYTYPE, bool>();
  8. }
  9. Hid_IF::~Hid_IF()
  10. {
  11. m_KeyStatus->clear();
  12. delete m_KeyStatus;
  13. m_KeyStatus = NULL;
  14. m_MouseKeyStatus->clear();
  15. delete m_MouseKeyStatus;
  16. m_MouseKeyStatus = NULL;
  17. }
  18. bool Hid_IF::InitKeyMap()
  19. {
  20. bool ret = true;
  21. //LIGHT_FUNCTION_BIT Light;
  22. //ret = GetLightStatus(&Light);
  23. //if (ret)
  24. //{
  25. // if (Light.CapsLock)
  26. // {
  27. // ret &= Key_Hit(HID_CAPSLOCK);
  28. // }
  29. // if (Light.ScrollLock)
  30. // {
  31. // ret &= Key_Hit(HID_SCROLLLOCK);
  32. // }
  33. // if (Light.NumLock == 0)
  34. // {
  35. // ret &= Key_Hit(HID_NUMLOCK);
  36. // }
  37. // KEY_CMD cmd;
  38. // InitKeyNode(&cmd);
  39. // ret &= PostKeyCmd(&cmd);//clear all
  40. //}
  41. m_KeyStatus->clear();
  42. return ret;
  43. }
  44. bool Hid_IF::InitMouseMap()
  45. {
  46. bool ret = true;
  47. //MOUSE_CMD cmd;
  48. //InitMouseNode(&cmd);
  49. //ret = PostMouseCmd(&cmd);//clear all
  50. (*m_MouseKeyStatus)[MOUSEKEYLEFT] = false;
  51. (*m_MouseKeyStatus)[MOUSEKEYRIGHT] = false;
  52. (*m_MouseKeyStatus)[MOUSEKEYMIDDLE] = false;
  53. return ret;
  54. }
  55. bool Hid_IF::InitHid()
  56. {
  57. bool ret = FindHid();
  58. if (ret)
  59. {
  60. ret &= InitKeyMap();
  61. ret &= InitMouseMap();
  62. }
  63. return ret;
  64. }
  65. void Hid_IF::MakeKeyTable(HID_KEY key,KEY_CMD *pCmd,BOOL Press)
  66. {
  67. if (key >= HID_LEFTCTRL && key <= HID_RIGHTWIN)
  68. {
  69. //left-------------
  70. if (key == HID_LEFTCTRL)
  71. {
  72. pCmd->Func_Cmd.KeyBits.LeftControl = Press;
  73. }
  74. if (key == HID_LEFTSHIFT)
  75. {
  76. pCmd->Func_Cmd.KeyBits.LeftShift = Press;
  77. }
  78. if (key == HID_LEFTALT)
  79. {
  80. pCmd->Func_Cmd.KeyBits.LeftAlt = Press;
  81. }
  82. if (key == HID_LEFTWIN)
  83. {
  84. pCmd->Func_Cmd.KeyBits.LeftWin = Press;
  85. }
  86. //right---------------
  87. if (key == HID_RIGHTCTRL)
  88. {
  89. pCmd->Func_Cmd.KeyBits.RightControl = Press;
  90. }
  91. if (key == HID_RIGHTSHIFT)
  92. {
  93. pCmd->Func_Cmd.KeyBits.RightShift = Press;
  94. }
  95. if (key == HID_RIGHTALT)
  96. {
  97. pCmd->Func_Cmd.KeyBits.RightAlt = Press;
  98. }
  99. if (key == HID_RIGHTWIN)
  100. {
  101. pCmd->Func_Cmd.KeyBits.RightWin = Press;
  102. }
  103. return;
  104. }
  105. for (DWORD i = 0; i < 6; i++)
  106. {
  107. if (pCmd->Keys[i] != 0)
  108. {
  109. continue;
  110. }
  111. pCmd->Keys[i] = key;
  112. return;
  113. }
  114. return;
  115. }
  116. bool Hid_IF::Key_Down(HID_KEY key)
  117. {
  118. bool ret = false;
  119. KEY_CMD cmd;
  120. if (m_KeyStatus->size() >= 6)
  121. {
  122. return false;
  123. }
  124. InitKeyNode(&cmd);
  125. map<HID_KEY, bool>::iterator iter = m_KeyStatus->begin();
  126. while (iter != m_KeyStatus->end())
  127. {
  128. MakeKeyTable(iter->first, &cmd, TRUE);
  129. ++iter;
  130. }
  131. MakeKeyTable(key, &cmd, TRUE);
  132. ret = PostKeyCmd(&cmd);
  133. if (ret)
  134. {
  135. //update map
  136. (*m_KeyStatus)[key] = true;
  137. }
  138. return ret;
  139. }
  140. bool Hid_IF::Key_Up(HID_KEY key)
  141. {
  142. bool ret = false;
  143. KEY_CMD cmd;
  144. InitKeyNode(&cmd);
  145. //update map
  146. map<HID_KEY, bool>::iterator iter = m_KeyStatus->find(key);
  147. if (iter != m_KeyStatus->end())
  148. {
  149. m_KeyStatus->erase(iter);
  150. }
  151. iter = m_KeyStatus->begin();
  152. while (iter != m_KeyStatus->end())
  153. {
  154. MakeKeyTable(iter->first, &cmd, TRUE);
  155. ++iter;
  156. }
  157. ret = PostKeyCmd(&cmd);
  158. if (ret)
  159. {
  160. //do err read
  161. char Res = 0;
  162. if (TryReadErrResponse(Res, 0))
  163. {
  164. if (Res == 2)
  165. {
  166. //input is too quick
  167. Sleep(MAX_DELAY);
  168. }
  169. }
  170. }
  171. return ret;
  172. }
  173. bool Hid_IF::Key_Hit(HID_KEY key, DWORD timeout)
  174. {
  175. bool ret = Key_Down(key);
  176. if (ret)
  177. {
  178. //printf("Key Down OK\n");
  179. Sleep(timeout);
  180. ret = Key_Up(key);
  181. if (ret)
  182. {
  183. //printf("Key Up OK\n");
  184. }
  185. }
  186. return ret;
  187. }
  188. bool Hid_IF::MouseKey_Down(MOUSEKEYTYPE key)
  189. {
  190. bool ret = false;
  191. MOUSE_CMD cmd;
  192. InitMouseNode(&cmd);
  193. if (key == MOUSEKEYLEFT || (*m_MouseKeyStatus)[MOUSEKEYLEFT] == true)
  194. {
  195. cmd.Func_Cmd.MouseBits.LeftButton = 1;
  196. }
  197. if (key == MOUSEKEYRIGHT || (*m_MouseKeyStatus)[MOUSEKEYRIGHT] == true)
  198. {
  199. cmd.Func_Cmd.MouseBits.RightButton = 1;
  200. }
  201. if (key == MOUSEKEYMIDDLE || (*m_MouseKeyStatus)[MOUSEKEYMIDDLE] == true)
  202. {
  203. cmd.Func_Cmd.MouseBits.MiddleButton = 1;
  204. }
  205. ret = PostMouseCmd(&cmd);
  206. if (ret)
  207. {
  208. //update map
  209. (*m_MouseKeyStatus)[key] = true;
  210. }
  211. return ret;
  212. }
  213. bool Hid_IF::MouseKey_Up(MOUSEKEYTYPE key)
  214. {
  215. MOUSE_CMD cmd;
  216. InitMouseNode(&cmd);
  217. //init second
  218. if ((*m_MouseKeyStatus)[MOUSEKEYLEFT] == true)
  219. {
  220. cmd.Func_Cmd.MouseBits.LeftButton = 1;
  221. }
  222. if ((*m_MouseKeyStatus)[MOUSEKEYRIGHT] == true)
  223. {
  224. cmd.Func_Cmd.MouseBits.RightButton = 1;
  225. }
  226. if ((*m_MouseKeyStatus)[MOUSEKEYMIDDLE] == true)
  227. {
  228. cmd.Func_Cmd.MouseBits.MiddleButton = 1;
  229. }
  230. //update
  231. if (key == MOUSEKEYLEFT)
  232. {
  233. cmd.Func_Cmd.MouseBits.LeftButton = 0;
  234. }
  235. if (key == MOUSEKEYRIGHT)
  236. {
  237. cmd.Func_Cmd.MouseBits.RightButton = 0;
  238. }
  239. if (key == MOUSEKEYMIDDLE)
  240. {
  241. cmd.Func_Cmd.MouseBits.MiddleButton = 0;
  242. }
  243. bool ret = PostMouseCmd(&cmd);
  244. if (ret)
  245. {
  246. if (key == MOUSEKEYLEFT)
  247. {
  248. (*m_MouseKeyStatus)[MOUSEKEYLEFT] = false;
  249. }
  250. if (key == MOUSEKEYRIGHT)
  251. {
  252. (*m_MouseKeyStatus)[MOUSEKEYRIGHT] = false;
  253. }
  254. if (key == MOUSEKEYMIDDLE)
  255. {
  256. (*m_MouseKeyStatus)[MOUSEKEYMIDDLE] = false;
  257. }
  258. //do err read
  259. char Res = 0;
  260. if (TryReadErrResponse(Res, 0))
  261. {
  262. if (Res == 4)
  263. {
  264. //input is too quick
  265. Sleep(MAX_DELAY);
  266. }
  267. }
  268. }
  269. return ret;
  270. }
  271. bool Hid_IF::MouseKey_Hit(MOUSEKEYTYPE key, DWORD timeout)
  272. {
  273. bool ret =MouseKey_Down(key);
  274. if (ret)
  275. {
  276. Sleep(timeout);
  277. ret = MouseKey_Up(key);
  278. }
  279. return ret;
  280. }
  281. bool Hid_IF::Mouse_Move(char x, char y)
  282. {
  283. MOUSE_CMD cmd;
  284. InitMouseNode(&cmd);
  285. //init second
  286. if ((*m_MouseKeyStatus)[MOUSEKEYLEFT] == true)
  287. {
  288. cmd.Func_Cmd.MouseBits.LeftButton = 1;
  289. }
  290. if ((*m_MouseKeyStatus)[MOUSEKEYRIGHT] == true)
  291. {
  292. cmd.Func_Cmd.MouseBits.RightButton = 1;
  293. }
  294. if ((*m_MouseKeyStatus)[MOUSEKEYMIDDLE] == true)
  295. {
  296. cmd.Func_Cmd.MouseBits.MiddleButton = 1;
  297. }
  298. cmd.X = x;
  299. cmd.Y = y;
  300. bool ret = PostMouseCmd(&cmd);
  301. if (ret)
  302. {
  303. //do err read
  304. char Res = 0;
  305. if (TryReadErrResponse(Res, 0))
  306. {
  307. if (Res == 4)
  308. {
  309. //input is too quick
  310. Sleep(MAX_DELAY);
  311. }
  312. }
  313. }
  314. return ret;
  315. }
  316. bool Hid_IF::Mouse_Wheel(char offset)
  317. {
  318. MOUSE_CMD cmd;
  319. InitMouseNode(&cmd);
  320. //init second
  321. if ((*m_MouseKeyStatus)[MOUSEKEYLEFT] == true)
  322. {
  323. cmd.Func_Cmd.MouseBits.LeftButton = 1;
  324. }
  325. if ((*m_MouseKeyStatus)[MOUSEKEYRIGHT] == true)
  326. {
  327. cmd.Func_Cmd.MouseBits.RightButton = 1;
  328. }
  329. if ((*m_MouseKeyStatus)[MOUSEKEYMIDDLE] == true)
  330. {
  331. cmd.Func_Cmd.MouseBits.MiddleButton = 1;
  332. }
  333. cmd.Wheel = offset;
  334. bool ret = PostMouseCmd(&cmd);
  335. if (ret)
  336. {
  337. //do err read
  338. char Res = 0;
  339. if (TryReadErrResponse(Res, 0))
  340. {
  341. if (Res == 4)
  342. {
  343. //input is too quick
  344. Sleep(MAX_DELAY);
  345. }
  346. }
  347. }
  348. return ret;
  349. }