123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599 |
- #pragma once
- // 下列 ifdef 块是创建使从 DLL 导出更简单的
- // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 AUTOFUNC_EXPORTS
- // 符号编译的。在使用此 DLL 的
- // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
- // AUTOFUNC_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
- // 符号视为是被导出的。
- #ifndef AUTOFUNC_EXPORTS
- #ifdef _WIN64
- #ifdef _DEBUG
- #pragma comment(lib, "AutoFuncX64D.lib")
- #else
- #pragma comment(lib, "AutoFuncX64.lib")
- #endif
- #else
- #ifdef _DEBUG
- #pragma comment(lib, "AutoFuncD.lib")
- #else
- #pragma comment(lib, "AutoFunc.lib")
- #endif
- #endif
- #endif
- #ifdef AUTOFUNC_EXPORTS
- #define AUTOFUNC_API __declspec(dllexport)
- #define AUTOFUNC_C_API extern "C" __declspec(dllexport)
- #else
- #define AUTOFUNC_API __declspec(dllimport)
- #define AUTOFUNC_C_API extern "C" __declspec(dllimport)
- #endif
- #include <map>
- #include <vector>
- #include <string.h>
- #include <setupapi.h>
- #include <hidsdi.h>
- #include <dbt.h>
- using namespace std;
- enum{
- MCD_RETURN_SUCCESS = 0,
- MCD_RETURN_FOUND_HID,
- MCD_RETURN_NO_FOUND_HID,
- MCD_RETURN_HID_IS_OPENED,//?
- MCD_RETURN_HID_NO_OPEN,//?
- };
- #define MAX_DELAY (500)
- #define MAX_READ_DELAY (200)
- typedef struct _HID_DEVICE {
- char DevicePath[MAX_PATH];
- char DataBuff[MAX_PATH];
- bool ReportIDExist;
- char ReportID;
- HANDLE HidDevice; // A file handle to the hid device.
- HIDP_CAPS Caps; // The Capabilities of this hid device.
- HIDD_ATTRIBUTES Attributes;
- } HID_DEVICE, *PHID_DEVICE;
- class AUTOFUNC_API Hid_File
- {
- HANDLE _hEventObject;
- OVERLAPPED _hIDOverlapped;
- HID_DEVICE _hidDevice;
- unsigned long _dataWaitProcess;
- unsigned long _inputReportByteLength;
- unsigned long _outputReportByteLength;
- DWORD AddReportID(char *pInputBuff, DWORD BuffLen);
- public:
- Hid_File();
- virtual ~Hid_File();
- bool OpenHid();
- void CloseHid();
- bool FindHid();
- bool WriteToHid(char *pInputBuff, DWORD BuffLen);
- INT ReadFromHid(char *pOutputBuff, DWORD BuffLen, DWORD timeout = MAX_READ_DELAY);
- };
- #pragma pack(push, 1)
- typedef struct _Key_Function_Bit
- {
- unsigned char LeftControl : 1;//bit0
- unsigned char LeftShift : 1;//bit1
- unsigned char LeftAlt : 1;//bit2
- unsigned char LeftWin : 1;//...
- unsigned char RightControl : 1;
- unsigned char RightShift : 1;
- unsigned char RightAlt : 1;
- unsigned char RightWin : 1;
- }KEY_FUNCTION_BIT;
- typedef struct _Mouse_Function_Bit
- {
- unsigned char LeftButton : 1;//bit0
- unsigned char RightButton : 1;//bit1
- unsigned char MiddleButton : 1;//bit2
- unsigned char Rev : 5;//...
- }MOUSE_FUNCTION_BIT;
- typedef struct _Light_Function_Bit
- {
- unsigned char NumLock : 1;//bit0
- unsigned char CapsLock : 1;//bit1
- unsigned char ScrollLock : 1;//bit2
- unsigned char Rev : 5;//...
- }LIGHT_FUNCTION_BIT;
- typedef union _Function_Byte
- {
- KEY_FUNCTION_BIT KeyBits;
- MOUSE_FUNCTION_BIT MouseBits;
- unsigned char Val;
- }FUNCTION_BYTE;
- typedef struct _Key_Cmd {
- unsigned char Len;
- unsigned char Cmd;
- FUNCTION_BYTE Func_Cmd;//byte1
- unsigned char Rev;//byte2
- unsigned char Keys[6];
- }KEY_CMD;
- typedef struct _Mouse_Cmd {
- unsigned char Len;
- unsigned char Cmd;
- FUNCTION_BYTE Func_Cmd;//byte1
- char X;//byte2
- char Y;//byte3
- char Wheel;//byte4
- }MOUSE_CMD;
- #pragma pack(pop)
- void InitKeyNode(KEY_CMD *pKey);
- void InitMouseNode(MOUSE_CMD *pMouse);
- class AUTOFUNC_API Hid_Cmd : public Hid_File
- {
- public:
- Hid_Cmd();
- virtual ~Hid_Cmd();
- bool PostKeyCmd(KEY_CMD *pKey);
- bool PostMouseCmd(MOUSE_CMD *pKey);
- bool GetLightStatus(LIGHT_FUNCTION_BIT *pVal);
- bool TryReadErrResponse(char Res, DWORD timeout = 100);
- };
- typedef unsigned char HID_KEY;
- typedef enum _MouseKeyType {
- MOUSEKEYLEFT,
- MOUSEKEYRIGHT,
- MOUSEKEYMIDDLE,
- MOUSEKEYMAX
- }MOUSEKEYTYPE;
- typedef enum _Hid_Key_ID {
- HID_A = 0x04,
- HID_B,
- HID_C,
- HID_D,
- HID_E,
- HID_F,
- HID_G,
- HID_H,
- HID_I,
- HID_J,
- HID_K,
- HID_L,
- HID_M,
- HID_N,
- HID_O,
- HID_P,
- HID_Q,
- HID_R,
- HID_S,
- HID_T,
- HID_U,
- HID_V,
- HID_W,
- HID_X,
- HID_Y,
- HID_Z,
- HID_1,
- HID_2,
- HID_3,
- HID_4,
- HID_5,
- HID_6,
- HID_7,
- HID_8,
- HID_9,
- HID_0,
- HID_ENTER,
- HID_ESC,
- HID_BACKSPACE,
- HID_TAB,
- HID_SPACE,
- HID_MINUS,//UNDERBAR
- HID_EQUAL,//PLUS
- HID_LKUOH,//[ {
- HID_RKUOH,//] }
- HID_OR,// \ |
- //跟实际情况不符,还是HID_OR
- //HID_TYINH,//` ~(左上1的旁边)
- HID_FENH = 0x33,//; :分好和冒号
- HID_YINH,// ' "
- //这个位置是正确的
- HID_TYINH,//` ~(左上1的旁边)
- HID_DOUH = 0x36,//, <
- HID_JUH,// . <
- HID_XIEH,// /?
- HID_CAPSLOCK,
- HID_F1,
- HID_F2,
- HID_F3,
- HID_F4,
- HID_F5,
- HID_F6,
- HID_F7,
- HID_F8,
- HID_F9,
- HID_F10,
- HID_F11,
- HID_F12,
- HID_PRINTSCREEN,
- HID_SCROLLLOCK,
- HID_PAUSE,
- HID_INSERT,
- HID_HOME,
- HID_PAGEUP,
- HID_DEL,
- HID_END,
- HID_PAGEDOWN,
- HID_RIGHT,
- HID_LEFT,
- HID_DOWN,
- HID_UP,
- HID_NUMLOCK,
- HID_PAD_DIV,
- HID_PAD_MULTIPLE,
- HID_PAD_MINUS,
- HID_PAD_PLUS,
- HID_PAD_ENTER,
- HID_PAD_1,
- HID_PAD_2,
- HID_PAD_3,
- HID_PAD_4,
- HID_PAD_5,
- HID_PAD_6,
- HID_PAD_7,
- HID_PAD_8,
- HID_PAD_9,
- HID_PAD_0,
- HID_PAD_DEL,
- HID_APP = 0x65,
- HID_LEFTCTRL = 0xE0,
- HID_LEFTSHIFT,
- HID_LEFTALT,
- HID_LEFTWIN,
- HID_RIGHTCTRL,
- HID_RIGHTSHIFT,
- HID_RIGHTALT,
- HID_RIGHTWIN,
- HID_KEY_MAX
- }HID_KEY_ID;
- class AUTOFUNC_API Hid_IF : public Hid_Cmd
- {
- map<HID_KEY, bool> *m_KeyStatus;//当前按下的状态表
- bool InitKeyMap();
- map<MOUSEKEYTYPE, bool> *m_MouseKeyStatus;
- bool InitMouseMap();
- void MakeKeyTable(HID_KEY key, KEY_CMD *pCmd, BOOL Press);
- public:
- Hid_IF();
- virtual ~Hid_IF();
- bool InitHid();
- bool Key_Down(HID_KEY key);
- bool Key_Up(HID_KEY key);
- bool Key_Hit(HID_KEY key, DWORD timeout = 300);
- bool GetKeyStatus(HID_KEY key);
- bool MouseKey_Down(MOUSEKEYTYPE key);
- bool MouseKey_Up(MOUSEKEYTYPE key);
- bool MouseKey_Hit(MOUSEKEYTYPE key, DWORD timeout = 300);
- bool Mouse_Move(char x, char y);
- bool Mouse_Wheel(char offset);
- };
- #define MAX_JUMP_DISTANCE (120)
- #pragma pack(push, 1)
- typedef struct _Ascii_Key_COMB {
- unsigned char Shift;
- unsigned char HidCode;
- }ASCII_KEY_COMB;
- typedef union _ASCII_NODE
- {
- WORD val;
- ASCII_KEY_COMB AsciiComb;
- }ASCII_NODE;
- #pragma pack(pop)
- class AUTOFUNC_API Hid_UI : public Hid_IF
- {
- map<char, ASCII_NODE> *m_AsciiMap;
- void InitAsciiMap();
- public:
- Hid_UI();
- virtual ~Hid_UI();
- bool InitUI();
- bool InputAsciiString(const char *pStr, DWORD timeperiod = 0);
- bool MoveToPos(INT X, INT Y, DWORD Radious);//DESKTOP POS,Absolute pos
- };
- #define ZORDER_ALLSEARCH (0xFFFFFFFF)
- #define ZORDER_DESKTOP (0)
- #define NO_WNDTYPE (0xFFFFFFFF)
- #define NO_GUIID (0xFFFFFFFF)
- #define NORMAL_WAIT_TM (10000)
- typedef enum _HitMethod {
- HM_NOTIFY_PARENT,
- HM_HIT,
- HM_CLICK,
- HM_REALCLICK,
- HM_MAX
- }HITMETHOD;
- class AUTOFUNC_API ExpObject
- {
- public:
- ExpObject(void);
- ExpObject(const TCHAR *pContent);
- virtual ~ExpObject(void);
- const char *ExpContext();
- TCHAR m_szExpContent[MAX_PATH];
- };
- class AUTOFUNC_API SystemCmds
- {
- public:
- SystemCmds(void);
- virtual ~SystemCmds(void);
- static BOOL EnableComputerCtrl();
- static BOOL CreateTheProcess_Console(const TCHAR *pfullFilePath, PROCESS_INFORMATION &pinfo, bool HideWindow = false);
- static BOOL RunTheProcess(const TCHAR *fullFilePath, bool HideWindow = false);
- static DWORD FindProcess(const TCHAR *strProcessName);
- static DWORD KillProcess(const TCHAR *strProcessName);
- static BOOL ShutDownComputer(BOOL Shutdown);
- };
- class AUTOFUNC_API InputCmds
- {
- public:
- InputCmds(void);
- virtual ~InputCmds(void);
- static BOOL NotifyParentHitButton(HWND wnd);
- static BOOL ClickLB(HWND wnd, BOOL real = FALSE);
- //static BOOL HitKeyDown(HWND wnd,UINT key,BOOL real = FALSE);
- //static BOOL HitKeyUp(HWND wnd,UINT key,BOOL real = FALSE);
- static BOOL HitMouse(HWND wnd, DWORD MsgType, DWORD ExKey, int x, int y, BOOL real = FALSE);
- //static BOOL HitMouseDown(HWND wnd,UINT key,BOOL real = FALSE);
- //static BOOL HitMouseUp(HWND wnd,UINT key,BOOL real = FALSE);
- //static BOOL Scroll(HWND wnd,UINT key,BOOL real = FALSE);
- static BOOL MouseMove(HWND wnd, BOOL real);
- static BOOL MouseMove(HWND wnd, int x, int y, BOOL real = FALSE);
- static BOOL SetText(HWND Wnd, TCHAR *pContext, BOOL real = FALSE);
- static BOOL HitKey(HWND wnd, DWORD vk, BOOL real = FALSE);
- //static BOOL HitVKey(HWND wnd, DWORD vk, BOOL real = FALSE);
- static void SendKeysReal(TCHAR *msg);
- static BOOL MakeFocus(HWND wnd, BOOL real = FALSE);
- static BOOL MakeFocusOfThis(HWND wnd, BOOL real = FALSE);
- //static BOOL GetText(HWND wnd,wstring &text);
- };
- class AUTOFUNC_API SysControl
- {
- HWND m_ResHwnd;
- public:
- SysControl(void);
- virtual ~SysControl(void);
- //text box ,button etc.
- bool GetHwndTitle(TCHAR *pszTitle, DWORD size);
- bool HitMenu(WORD MenuId);
- //check box
- bool GetCheckBoxStr(TCHAR *pszTitle, DWORD size);
- bool SetCheckBox(INT Set);
- INT GetCheckBoxStatus();// <0:failed,0:Gray,1:not sel,2:sel
- //list box
- INT GetListCount();
- bool GetListBoxTitle(DWORD Idx, TCHAR *pszTitle);
- bool AddStringListBox(TCHAR *pszTitle);
- //combo box
- INT GetComboCount();
- INT GetComboCurSelIdx();
- bool GetComboCurSelStr(TCHAR *pszTitle, DWORD size);
- bool SetComboCurSel(DWORD Idx);
- INT SetComboCurSel(const char* pKey);
- //tab control
- INT GetTabControlCount();
- void GetTabControlSelect(int &sel);
- BOOL SetTabControlSelect(DWORD sel, BOOL real = FALSE);
- bool GetTabControlTitles(DWORD Idx, TCHAR *pszTitle, DWORD size);
- //list view control
- void GetListViewControlSize(INT &Count, INT &Column);
- bool GetListViewItemTitle(DWORD Column, TCHAR *pszTitle, DWORD size);
- bool GetListViewItemContext(DWORD hang, DWORD lie, TCHAR *pszTitle, DWORD size);
- INT ListViewMakeSelection(TCHAR *pszName);
- bool ListViewMakeChecked(TCHAR *pszName, BOOL Checked);
- DWORD GetListViewControlSelect(INT *pList, DWORD size);//not tested
- bool ListViewControlHit(BOOL dbClick, DWORD hang, DWORD lie, BOOL real = FALSE);//not tested
- //tree view control
- //void GetTreeSelection(vector<wstring> &TreeRoute);
- //BOOL HitTreeNode(BOOL dbClick,vector<wstring> &OneTreeRoute,BOOL real = FALSE);
- BOOL TreeViewSelectAB(DWORD firstLevel, DWORD secondLevel);
- BOOL TreeViewSelectAB(DWORD firstLevel, INT secondLevel, BOOL Focus);
- bool TreeViewGetSelectedItemTitle(TCHAR *pszTitle);
- bool TreeViewMakeSelection(TCHAR *pszName);
- bool TreeViewMakeIdxChecked(DWORD Idx, BOOL Checked);
- bool TreeViewMakeChecked(TCHAR *pszName, BOOL Checked);
- bool TreeViewMakeCheckedItem(HTREEITEM hFound, BOOL Checked);
- bool TreeViewMakeCheckedAB(DWORD firstLevel, INT secondLevel);
- void Sethand(HWND Hand);
- //common
- BOOL IsObjectValid();
- private:
- bool GetTreeViewNodeName(PVOID hItem, TCHAR *pszBuff);
- //BOOL HitSpecificTreeNode(BOOL dbClick,HTREEITEM &hItem,BOOL real);
- PVOID FindSpecificTreeNode(PVOID hItem, TCHAR *pszNodeName);
- };
- class WindNode;
- class AUTOFUNC_API WindowObject
- {
- BOOL MakeParentTree();
- //BOOL FilterWindowsByParent(vector<WindNode> &list1);
- public:
- WindowObject(void);
- virtual ~WindowObject(void);
- void ClearObject();
- void ClearLocateData();
- HWND GetLocatedHwnd();
- POINT GetLocatedTopLeft();
- const TCHAR* GetProcessName();
- const TCHAR* GetTitle();
- virtual BOOL LoadConfig(const TCHAR * pRFilePath);
- virtual INT LocateWindow(BOOL Visible = TRUE);//1 ok,0 multi,-1 ng
- virtual INT WaitLocateWindow(DWORD tmPeriod = NORMAL_WAIT_TM, BOOL Visible = TRUE, BOOL Exp = TRUE);
- INT IsObjectVisible();//-1:no hwnd,0:hide,1:show
- INT WaitHideWindow(TCHAR *pID, HITMETHOD hm = HM_NOTIFY_PARENT, DWORD tmPeriod = NORMAL_WAIT_TM, BOOL Exp = TRUE,DWORD moretry = 1);//-1:no hwnd,0:show,1:hide
- virtual BOOL SendMessageTo(DWORD msg, DWORD wp, DWORD lp, BOOL sendFlag = TRUE);
- virtual BOOL MakeFocus(BOOL real = FALSE);
- virtual BOOL SetText(TCHAR *pContext, BOOL real = FALSE);
- virtual BOOL NotifyParentHitButton();
- virtual BOOL ClickLB(BOOL real = FALSE);
- virtual BOOL MouseMove(BOOL real);
- BOOL DoClick(BOOL real = FALSE);
- virtual BOOL MouseMove(int x, int y, BOOL real = FALSE);
- virtual BOOL HitMouse(DWORD MsgType, DWORD ExKey, int x, int y, BOOL real = FALSE);
- virtual BOOL HitKey(DWORD vk, BOOL real = FALSE);
- virtual BOOL HitVKey(DWORD vk, BOOL real = FALSE);
- WindowObject &operator [](TCHAR *pID);
- WindowObject& operator = (WindNode &node);
- map<string, WindowObject*> *m_SubNodes;
- string *m_ConfigName;
- string *m_ID;
- string *m_Process;
- string *m_ReqTitle;
- string *m_ExistTitle;
- string *m_Class;
- INT m_Style;
- INT m_StyleEx;
- INT m_Width;
- INT m_Height;
- INT m_zOrder;
- DWORD m_GuiID;
- string *m_Dict;
- string *m_DictKey;
- DWORD m_DictRgb;
- RECT m_DictArea;
- WindowObject *m_pParent;
- //results
- HWND m_ResHwnd;//for search and result
- POINT m_ResDictKey;
- };
- AUTOFUNC_C_API WindowObject* GetWindowObject(void);
- AUTOFUNC_C_API void ReleaseWindowObject(WindowObject* &pObj);
|