#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::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();
|
}
|
|
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);
|
}
|