企业宣传,产品推广,广告招商,广告投放联系seowdb

2 100行 键鼠自控 成功一个便捷好玩的鼠标按键精灵

欢迎大家提意见,始终改良基于上一篇的鼠标志程器的框架和常识,这次成功一个便捷的鼠标按键精灵。按键精灵类软件经常被用在游戏外挂和程序界面的智能化测试,模拟管理鼠标、键盘、外部设施的形态,经过口头提早录制好的规定、脚原本则可以成功批量解决。整个程序比拟便捷,成功形式如下:1、首先创立对话框和对话框上的控件,而后就是注册热键,由于一旦鼠标智能点击开局,就只能经过键盘组合键来让整个环节中止。特意要留意的是,注册的热键尽量不要和其它程序注册的一样,否则会抵触,抵触后或者会失效,因此注册的越不凡越好。这里注册了2组热键,CTRL+SHIFT+F4用来锁定或监禁鼠标的位置,CTRL+SHIFT+F6用来中止鼠标智能点击的环节。注册的热键要在程序分开时被动调用UnregisterHotKey删除掉。RegisterHotKey(hWndDlg, WM_MOUSE_POS, MOD_CONTROL | MOD_SHIFT, VK_F4);RegisterHotKey(hWndDlg, WM_MOUSE_STOP, MOD_CONTROL | MOD_SHIFT, VK_F6);2、这里经常使用CreateDialogParam创立非形式对话框,制订自己的信息循环,非形式对话框可以反常接纳键盘、鼠标信息。3、信息及逻辑解决程序进行事先,首先创立定时器,用来实时失掉鼠标的位置。解决热键

热键的信息解决逻辑3、进行按钮解决,进行定时器开局模拟鼠标点击,开局和完结期间的逻辑比拟便捷临时没有成功。经过mouse_event成功模拟鼠标点击,但杀软、防火墙、局部游戏则或者屏蔽mouse_event。这些程序普通会挂接钩子或驳回驱动,识别信息究竟是不是由外部真正的键盘和鼠标发生的,假设不是会摈弃掉,重要是为了防止记载键盘和鼠标的木马程序。完整的程序代码如下:#define WM_MOUSE_POS WM_USER + 100#define WM_MOUSE_STOP WM_USER + 100#define ID_TIMER_MOUSE 1#define ID_TIMER_CLICK 2BOOL CALLBACK WndDlg(HWND,UINT,WPARAM,LPARAM);BOOL CALLBACK AboutDlg(HWND,UINT,WPARAM,LPARAM);HINSTANCE hInst;POINT g_mousePos = { 0, 0 };bool g_lockMouse = false;SYSTEMTIME g_startSt = { 0 }, g_endSt = { 0 };int g_clickType = 0; //0示意单击,1示意双击int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nShowCmd){HWND hWndDlg = CreateDialogParam(hInst, “IDD_DIALOG1”, NULL, (DLGPROC)WndDlg, NULL);HWND hWndComboBox = GetDlgItem(hWndDlg, IDC_COMBO_SELECT_TYPE);SendMessage(hWndComboBox, CB_ADDSTRING, 0, (LPARAM)TEXT(“单击左键”));SendMessage(hWndComboBox, CB_ADDSTRING, 0, (LPARAM)TEXT(“双击左键”));SendMessage(hWndComboBox, CB_SETCURSEL, 0, 0);SYSTEMTIME st = { 2020,1,0,1,1,0,0,0 }; //自动设置继续1小时,留神此处的期间的有效性SendMessage(GetDlgItem(hWndDlg, IDC_DTP_CONTINUE), DTM_SETSYSTEMTIME, GDT_VALID, (LPARAM)&st);SetWindowText(GetDlgItem(hWndDlg, IDC_INTERVAL), “1000”);SetWindowText(hWndDlg, “鼠标模拟”);ShowWindow(hWndDlg, SW_SHOW);//注册的热键尽量不要和其它程序注册的一样,否则会抵触,抵触后会失效,杀软等也会屏蔽热键和mouse_eventRegisterHotKey(hWndDlg, WM_MOUSE_POS, MOD_CONTROL | MOD_SHIFT, VK_F4);RegisterHotKey(hWndDlg, WM_MOUSE_STOP, MOD_CONTROL | MOD_SHIFT, VK_F6);MSG msg;while (GetMessage(&msg, NULL, NULL, NULL)) {//if (msg.message == WM_KEYDOWN) {// if (msg.wParam == VK_F3) g_lockMouse = !g_lockMouse;//}if (!IsDialogMessage(hWndDlg, &msg)) {// 假设信息没有被解决, 前往值为0TranslateMessage(&msg);DispatchMessage(&msg);}}UnregisterHotKey(hWndDlg, WM_MOUSE_POS);UnregisterHotKey(hWndDlg, WM_MOUSE_STOP);return 0;}void CALLBACK UpdateMousePosTimeProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime){if (g_lockMouse) return;GetCursorPos(&g_mousePos);TCHAR str[64] = { 0 };wsprintf(str, “%d , %d”, g_mousePos);SetWindowText(GetDlgItem(hwnd, IDC_MOUSE_POS), str);}void SetStartBtnState(HWND hwnd, BOOL state){EnableWindow(GetDlgItem(hwnd, IDC_BTN_STOP), !state);EnableWindow(GetDlgItem(hwnd, IDC_BTN_START), state);}//此处未解决开局和完结期间void CALLBACK MouseClickTimeProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime){SetCursorPos(g_mousePos.x, g_mousePos.y);Sleep(200);for (int i = 0; i <= g_clickType; i++) {mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, g_mousePos.x, g_mousePos.y, 0, 0);}}void StartMouseClickTimer(HWND hwnd){TCHAR str[1024] = { 0 };GetWindowText(GetDlgItem(hwnd, IDC_INTERVAL), str, 1000);int inteval = atoi(str);if (inteval < 100) {MessageBox(hwnd, "距离期间要大于等于100", "失误", MB_YESNO);return;}g_clickType = SendMessage(GetDlgItem(hwnd, IDC_COMBO_SELECT_TYPE), CB_GETCURSEL, 0, 0);SetTimer(hwnd, ID_TIMER_CLICK, inteval, MouseClickTimeProc);}BOOL CALLBACK WndDlg(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){switch (message) {case WM_INITDIALOG:SetTimer(hwnd, ID_TIMER_MOUSE, 100, UpdateMousePosTimeProc);SetStartBtnState(hwnd, TRUE);return TRUE;case WM_HOTKEY:if (HIWORD(lParam) == VK_F4 && LOWORD(lParam) == (MOD_CONTROL | MOD_SHIFT)) {g_lockMouse = !g_lockMouse;}if (HIWORD(lParam) == VK_F6 && LOWORD(lParam) == (MOD_CONTROL | MOD_SHIFT)) {SetStartBtnState(hwnd, TRUE);KillTimer(hwnd, ID_TIMER_CLICK);}return TRUE;case WM_COMMAND:switch (LOWORD(wParam)) {case IDC_BTN_START:SetStartBtnState(hwnd, FALSE);StartMouseClickTimer(hwnd);break;case IDC_BTN_STOP:SetStartBtnState(hwnd, TRUE);KillTimer(hwnd, ID_TIMER_CLICK);break;}return TRUE;case WM_CLOSE:KillTimer(hwnd, ID_TIMER_MOUSE);KillTimer(hwnd, ID_TIMER_CLICK);DestroyWindow(hwnd);return TRUE;case WM_DESTROY:PostQuitMessage(0);return TRUE;default:return FALSE;}return FALSE;}原创文章,请勿转载

© 版权声明
评论 抢沙发
加载中~
每日一言
不怕万人阻挡,只怕自己投降
Not afraid of people blocking, I'm afraid their surrender