#include "Win32Util.h"
|
|
#include <thread>
|
#include <vector>
|
|
|
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<HWND> Win32Util::searchWindow(string name) {
|
auto hwnd = GetDesktopWindow();
|
HWND mainPage = HWND();
|
//»ñÈ¡×ÀÃæ×Ó´°¿Ú¾ä±ú
|
hwnd = GetWindow(hwnd, GW_CHILD);
|
list<HWND> 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);
|
}
|