123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427 |
- #include "stdafx.h"
- #include "Hid_IF.h"
- #include "AutoFunc.h"
- Hid_IF::Hid_IF()
- {
- m_KeyStatus = new map<HID_KEY, bool>();
- m_MouseKeyStatus = new map<MOUSEKEYTYPE, bool>();
- }
- Hid_IF::~Hid_IF()
- {
- m_KeyStatus->clear();
- delete m_KeyStatus;
- m_KeyStatus = NULL;
- m_MouseKeyStatus->clear();
- delete m_MouseKeyStatus;
- m_MouseKeyStatus = NULL;
- }
- bool Hid_IF::InitKeyMap()
- {
- bool ret = true;
- //LIGHT_FUNCTION_BIT Light;
- //ret = GetLightStatus(&Light);
- //if (ret)
- //{
- // if (Light.CapsLock)
- // {
- // ret &= Key_Hit(HID_CAPSLOCK);
- // }
- // if (Light.ScrollLock)
- // {
- // ret &= Key_Hit(HID_SCROLLLOCK);
- // }
- // if (Light.NumLock == 0)
- // {
- // ret &= Key_Hit(HID_NUMLOCK);
- // }
- // KEY_CMD cmd;
- // InitKeyNode(&cmd);
- // ret &= PostKeyCmd(&cmd);//clear all
- //}
- m_KeyStatus->clear();
- return ret;
- }
- bool Hid_IF::InitMouseMap()
- {
- bool ret = true;
- //MOUSE_CMD cmd;
- //InitMouseNode(&cmd);
- //ret = PostMouseCmd(&cmd);//clear all
- (*m_MouseKeyStatus)[MOUSEKEYLEFT] = false;
- (*m_MouseKeyStatus)[MOUSEKEYRIGHT] = false;
- (*m_MouseKeyStatus)[MOUSEKEYMIDDLE] = false;
- return ret;
- }
- bool Hid_IF::InitHid()
- {
- bool ret = FindHid();
- if (ret)
- {
- ret &= InitKeyMap();
- ret &= InitMouseMap();
- }
- return ret;
- }
- void Hid_IF::MakeKeyTable(HID_KEY key,KEY_CMD *pCmd,BOOL Press)
- {
- if (key >= HID_LEFTCTRL && key <= HID_RIGHTWIN)
- {
- //left-------------
- if (key == HID_LEFTCTRL)
- {
- pCmd->Func_Cmd.KeyBits.LeftControl = Press;
- }
- if (key == HID_LEFTSHIFT)
- {
- pCmd->Func_Cmd.KeyBits.LeftShift = Press;
- }
- if (key == HID_LEFTALT)
- {
- pCmd->Func_Cmd.KeyBits.LeftAlt = Press;
- }
- if (key == HID_LEFTWIN)
- {
- pCmd->Func_Cmd.KeyBits.LeftWin = Press;
- }
- //right---------------
- if (key == HID_RIGHTCTRL)
- {
- pCmd->Func_Cmd.KeyBits.RightControl = Press;
- }
- if (key == HID_RIGHTSHIFT)
- {
- pCmd->Func_Cmd.KeyBits.RightShift = Press;
- }
- if (key == HID_RIGHTALT)
- {
- pCmd->Func_Cmd.KeyBits.RightAlt = Press;
- }
- if (key == HID_RIGHTWIN)
- {
- pCmd->Func_Cmd.KeyBits.RightWin = Press;
- }
- return;
- }
- for (DWORD i = 0; i < 6; i++)
- {
- if (pCmd->Keys[i] != 0)
- {
- continue;
- }
- pCmd->Keys[i] = key;
- return;
- }
- return;
- }
- bool Hid_IF::Key_Down(HID_KEY key)
- {
- bool ret = false;
- KEY_CMD cmd;
- if (m_KeyStatus->size() >= 6)
- {
- return false;
- }
- InitKeyNode(&cmd);
-
- map<HID_KEY, bool>::iterator iter = m_KeyStatus->begin();
- while (iter != m_KeyStatus->end())
- {
- MakeKeyTable(iter->first, &cmd, TRUE);
- ++iter;
- }
- MakeKeyTable(key, &cmd, TRUE);
- ret = PostKeyCmd(&cmd);
- if (ret)
- {
- //update map
- (*m_KeyStatus)[key] = true;
- }
- return ret;
- }
- bool Hid_IF::Key_Up(HID_KEY key)
- {
- bool ret = false;
- KEY_CMD cmd;
- InitKeyNode(&cmd);
- //update map
- map<HID_KEY, bool>::iterator iter = m_KeyStatus->find(key);
- if (iter != m_KeyStatus->end())
- {
- m_KeyStatus->erase(iter);
- }
- iter = m_KeyStatus->begin();
- while (iter != m_KeyStatus->end())
- {
- MakeKeyTable(iter->first, &cmd, TRUE);
- ++iter;
- }
- ret = PostKeyCmd(&cmd);
- if (ret)
- {
- //do err read
- char Res = 0;
- if (TryReadErrResponse(Res, 0))
- {
- if (Res == 2)
- {
- //input is too quick
- Sleep(MAX_DELAY);
- }
- }
- }
- return ret;
- }
- bool Hid_IF::Key_Hit(HID_KEY key, DWORD timeout)
- {
- bool ret = Key_Down(key);
- if (ret)
- {
- //printf("Key Down OK\n");
- Sleep(timeout);
- ret = Key_Up(key);
- if (ret)
- {
- //printf("Key Up OK\n");
- }
- }
- return ret;
- }
- bool Hid_IF::MouseKey_Down(MOUSEKEYTYPE key)
- {
- bool ret = false;
- MOUSE_CMD cmd;
- InitMouseNode(&cmd);
- if (key == MOUSEKEYLEFT || (*m_MouseKeyStatus)[MOUSEKEYLEFT] == true)
- {
- cmd.Func_Cmd.MouseBits.LeftButton = 1;
- }
- if (key == MOUSEKEYRIGHT || (*m_MouseKeyStatus)[MOUSEKEYRIGHT] == true)
- {
- cmd.Func_Cmd.MouseBits.RightButton = 1;
- }
- if (key == MOUSEKEYMIDDLE || (*m_MouseKeyStatus)[MOUSEKEYMIDDLE] == true)
- {
- cmd.Func_Cmd.MouseBits.MiddleButton = 1;
- }
- ret = PostMouseCmd(&cmd);
- if (ret)
- {
- //update map
- (*m_MouseKeyStatus)[key] = true;
- }
- return ret;
- }
- bool Hid_IF::MouseKey_Up(MOUSEKEYTYPE key)
- {
- MOUSE_CMD cmd;
- InitMouseNode(&cmd);
- //init second
- if ((*m_MouseKeyStatus)[MOUSEKEYLEFT] == true)
- {
- cmd.Func_Cmd.MouseBits.LeftButton = 1;
- }
- if ((*m_MouseKeyStatus)[MOUSEKEYRIGHT] == true)
- {
- cmd.Func_Cmd.MouseBits.RightButton = 1;
- }
- if ((*m_MouseKeyStatus)[MOUSEKEYMIDDLE] == true)
- {
- cmd.Func_Cmd.MouseBits.MiddleButton = 1;
- }
- //update
- if (key == MOUSEKEYLEFT)
- {
- cmd.Func_Cmd.MouseBits.LeftButton = 0;
- }
- if (key == MOUSEKEYRIGHT)
- {
- cmd.Func_Cmd.MouseBits.RightButton = 0;
- }
- if (key == MOUSEKEYMIDDLE)
- {
- cmd.Func_Cmd.MouseBits.MiddleButton = 0;
- }
- bool ret = PostMouseCmd(&cmd);
- if (ret)
- {
- if (key == MOUSEKEYLEFT)
- {
- (*m_MouseKeyStatus)[MOUSEKEYLEFT] = false;
- }
- if (key == MOUSEKEYRIGHT)
- {
- (*m_MouseKeyStatus)[MOUSEKEYRIGHT] = false;
- }
- if (key == MOUSEKEYMIDDLE)
- {
- (*m_MouseKeyStatus)[MOUSEKEYMIDDLE] = false;
- }
- //do err read
- char Res = 0;
- if (TryReadErrResponse(Res, 0))
- {
- if (Res == 4)
- {
- //input is too quick
- Sleep(MAX_DELAY);
- }
- }
- }
- return ret;
- }
- bool Hid_IF::MouseKey_Hit(MOUSEKEYTYPE key, DWORD timeout)
- {
- bool ret =MouseKey_Down(key);
- if (ret)
- {
- Sleep(timeout);
- ret = MouseKey_Up(key);
- }
- return ret;
- }
- bool Hid_IF::Mouse_Move(char x, char y)
- {
- MOUSE_CMD cmd;
- InitMouseNode(&cmd);
- //init second
- if ((*m_MouseKeyStatus)[MOUSEKEYLEFT] == true)
- {
- cmd.Func_Cmd.MouseBits.LeftButton = 1;
- }
- if ((*m_MouseKeyStatus)[MOUSEKEYRIGHT] == true)
- {
- cmd.Func_Cmd.MouseBits.RightButton = 1;
- }
- if ((*m_MouseKeyStatus)[MOUSEKEYMIDDLE] == true)
- {
- cmd.Func_Cmd.MouseBits.MiddleButton = 1;
- }
- cmd.X = x;
- cmd.Y = y;
- bool ret = PostMouseCmd(&cmd);
- if (ret)
- {
- //do err read
- char Res = 0;
- if (TryReadErrResponse(Res, 0))
- {
- if (Res == 4)
- {
- //input is too quick
- Sleep(MAX_DELAY);
- }
- }
- }
- return ret;
- }
- bool Hid_IF::Mouse_Wheel(char offset)
- {
- MOUSE_CMD cmd;
- InitMouseNode(&cmd);
- //init second
- if ((*m_MouseKeyStatus)[MOUSEKEYLEFT] == true)
- {
- cmd.Func_Cmd.MouseBits.LeftButton = 1;
- }
- if ((*m_MouseKeyStatus)[MOUSEKEYRIGHT] == true)
- {
- cmd.Func_Cmd.MouseBits.RightButton = 1;
- }
- if ((*m_MouseKeyStatus)[MOUSEKEYMIDDLE] == true)
- {
- cmd.Func_Cmd.MouseBits.MiddleButton = 1;
- }
- cmd.Wheel = offset;
- bool ret = PostMouseCmd(&cmd);
- if (ret)
- {
- //do err read
- char Res = 0;
- if (TryReadErrResponse(Res, 0))
- {
- if (Res == 4)
- {
- //input is too quick
- Sleep(MAX_DELAY);
- }
- }
- }
- return ret;
- }
|