#include "Win32Util.h" #include #include void clickRunner(int delay) // º¯ÊýÃû×Ö¿ÉËæÒâ { Sleep(delay); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); Sleep(10); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); Sleep(10); } void moveRunner(int x, int y,int delay) // º¯ÊýÃû×Ö¿ÉËæÒâ { Sleep(delay); SetCursorPos(x, y); Sleep(20); } void kbNumRunner(string nums, int delay) // º¯ÊýÃû×Ö¿ÉËæÒâ { Sleep(delay); for (int i = 0;i < nums.length();i++) { int code = int(nums.c_str()[i]); if (code == '.') { code = 110; } keybd_event(code, 0, 0, 0); Sleep(5); keybd_event(code, 0, KEYEVENTF_KEYUP, 0); Sleep(20); } } void kbKeyRunner(int code, int delay) // º¯ÊýÃû×Ö¿ÉËæÒâ { Sleep(delay); keybd_event(code, 0, 0, 0); keybd_event(code, 0, KEYEVENTF_KEYUP, 0); } list Win32Util::searchWindow(string name) { auto hwnd = GetDesktopWindow(); HWND mainPage = HWND(); //»ñÈ¡×ÀÃæ×Ó´°¿Ú¾ä±ú hwnd = GetWindow(hwnd, GW_CHILD); list list; while (hwnd != NULL) { std::string str= getWindowName(hwnd); if (str.find(name) != string::npos) { list.push_back(hwnd); } hwnd = GetNextWindow(hwnd, GW_HWNDNEXT); } return list; } string Win32Util::getWindowName(HWND hwnd) { int length = GetWindowTextLength(hwnd); TCHAR getbuf[1000]; GetWindowText(hwnd, getbuf, length + 1); int iLen = WideCharToMultiByte(CP_ACP, 0, getbuf, -1, NULL, 0, NULL, NULL); //Ê×ÏȼÆËãTCHAR ³¤¶È¡£ char* chRtn =(char*) alloca( iLen * sizeof(char)); //¶¨ÒåÒ»¸ö TCHAR ³¤¶È´óСµÄ CHAR ÀàÐÍ¡£ WideCharToMultiByte(CP_ACP, 0, getbuf, -1, chRtn, iLen, NULL, NULL); //½«TCHAR ÀàÐ͵ÄÊý¾Ýת»»Îª CHAR ÀàÐÍ¡£ std::string str(chRtn); return str; } void Win32Util::click(int delay) { thread clickRunner(clickRunner,delay); clickRunner.join(); } void Win32Util::click(int x, int y, int delay) { thread clickRunner(moveRunner, x, y,delay); clickRunner.join(); click(); } void Win32Util::mouseMove(int x, int y, int delay) { thread clickRunner(moveRunner, x, y, delay); clickRunner.join(); } void Win32Util::focus(HWND hwnd) { SetForegroundWindow(hwnd); SetFocus(hwnd); } void Win32Util::copy(string text) { HWND hWnd = NULL; OpenClipboard(hWnd);//´ò¿ª¼ôÇаå EmptyClipboard();//Çå¿Õ¼ôÇаå HANDLE hHandle = GlobalAlloc(GMEM_FIXED, 1000);//·ÖÅäÄÚ´æ char* pData = (char*)GlobalLock(hHandle);//Ëø¶¨Äڴ棬·µ»ØÉêÇëÄÚ´æµÄÊ×µØÖ· strcpy(pData, text.c_str()); SetClipboardData(CF_TEXT, hHandle);//ÉèÖüôÇаåÊý¾Ý GlobalUnlock(hHandle);//½â³ýËø¶¨ CloseClipboard();//¹Ø±Õ¼ôÇаå } //¼üÅÌÊäÈëÊý×Ö void Win32Util::keyboardNum(string num, int delay) { thread runner(kbNumRunner, num, delay); runner.join(); } //¼üÅÌÊäÈëÆäËû¼ü void Win32Util::keyboard(int code, int delay) { thread runner(kbKeyRunner, code, delay); runner.join(); } void Win32Util::keyboardPaste() { keybd_event(VK_CONTROL, 0, 0, 0); // °´ÏÂCTRL¼ü keybd_event('V', 0, 0, 0); // °´ÏÂa¼ü Sleep(50); keybd_event('V', 0, KEYEVENTF_KEYUP, 0);// ËÉ¿ªa¼ü keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);// ËÉ¿ªCTRL¼ü } DEVMODE Win32Util::getL2ScreenInfo() { //»ñÈ¡ÆÁÄ»ÊýÁ¿ DEVMODE dm; int screenNUm = GetSystemMetrics(SM_CMONITORS); for (int i = 0;i < screenNUm;i++) { DISPLAY_DEVICE device; ZeroMemory(&device, sizeof(DISPLAY_DEVICE)); device.cb = sizeof(DISPLAY_DEVICE); EnumDisplayDevices(NULL, i, &device, NULL); ZeroMemory(&dm, sizeof(dm)); dm.dmSize = sizeof(dm); EnumDisplaySettings(device.DeviceName, ENUM_CURRENT_SETTINGS, &dm); if (dm.dmPelsWidth > 3000) { return dm; } } throw string("ÉÐδÕÒµ½ÊʺÏL2µÄÏÔʾÉ豸"); return DEVMODE(); } void Win32Util::moveWin(HWND win, int x, int y, int width, int height) { MoveWindow(win,x,y,width,height,TRUE); } bool Win32Util::isWindowShow(HWND win) { return IsWindowVisible(win); } void Win32Util::showWindow(HWND hwnd) { ShowWindow(hwnd, SW_SHOWNORMAL); } void Win32Util::selectTexFileWin10(HWND hwnd, string path) { //Ñ¡Ôñ·¾¶ HWND pathWin = FindWindowExA(hwnd, NULL, "WorkerW", NULL); pathWin = FindWindowExA(pathWin, NULL, "ReBarWindow32", NULL); pathWin = FindWindowExA(pathWin, NULL, "Address Band Root", NULL); pathWin = FindWindowExA(pathWin, NULL, "msctls_progress32", NULL); pathWin = FindWindowExA(pathWin, NULL, "Breadcrumb Parent", NULL); pathWin = FindWindowExA(pathWin, NULL, "ToolbarWindow32", NULL); RECT p; GetWindowRect(pathWin, &p); Win32Util::focus(hwnd); Win32Util::click(p.right - 5, p.top + 5, 10); Sleep(1000); //¸´ÖÆÂ·¾¶ Win32Util::copy(path); //Õ³Ìù·¾¶ keyboardPaste(); //°´enter°´¼ü keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); //Ñ¡×ŵ¼ÈëTxt HWND typeWin = FindWindowExA(hwnd, NULL, "ComboBox", NULL); GetWindowRect(typeWin, &p); Win32Util::focus(typeWin); Win32Util::click(p.right - 5, p.top + 5, 10); Win32Util::click(p.right - 5, p.bottom + 30, 100); Sleep(500); //Ñ¡ÖÐÎļþ HWND contentWin = FindWindowExA(hwnd, NULL, "DUIViewWndClassName", NULL); contentWin = FindWindowExA(contentWin, NULL, "DirectUIHWND", NULL); HWND contentWin_ = FindWindowExA(contentWin, NULL, "CtrlNotifySink", NULL); for (int i = 0;i < 5;i++) { if (FindWindowExA(contentWin_, NULL, "SHELLDLL_DefView", NULL) > 0) break; contentWin_ = FindWindowExA(contentWin, contentWin_, "CtrlNotifySink", NULL); } GetWindowRect(contentWin_, &p); Win32Util::click(p.left + 20, p.top + 10, 10); Win32Util::click(p.left + 20, p.top + 10, 10); Win32Util::click(p.left + 20, p.top + 10, 10); //Sleep(100); //µã»÷´ò¿ª //HWND openWin = FindWindowExA(hwnd, NULL, NULL, "´ò¿ª(&O)"); //GetWindowRect(openWin, &p); //return; //Win32Util::click((p.left + p.right) / 2, (p.top + p.bottom) / 2, 100); } void Win32Util::rollMouseWheel(bool back, HWND win,int x, int y) { //back-ÊÇ·ñÍùºó¹ö SendMessage(win, WM_MOUSEWHEEL, back?0xFF880000:0x00780000, MAKEWORD(x, y)); } void Win32Util::getWindowRect(HWND hwnd, RECT *rect) { GetWindowRect(hwnd, rect); }