• 自动单击程序


    我写的程序交给测试组测试时, 经常需要自动单击功能-.-于是开发了这么一个自动单击工具.

    包括的功能有:

    1.设置鼠标

    2.自动找按钮

    3.设置触发频率.

    工程见: https://files.cnblogs.com/lin1270/AutoClick_ex.zip

    2012_04_19 最新修改:

    1. 支持C#按钮单击。

    2. 支持复选框、单选框、Static控件等单击。

    C#的Link控件有问题,改成如下判断了。附件的代码并没有更改---

    if (hwndParent != NULL && IsWindow (hwndParent)) {
                        DWORD dwStyle = GetWindowLong ((*it)->ctrl.hwnd, GWL_STYLE);
                        if (dwStyle & BS_PUSHBUTTON) {
                            PostMessage (hwndParent, WM_COMMAND, MAKEWPARAM (GetWindowLong ((*it)->ctrl.hwnd, GWL_ID),BN_CLICKED), (LPARAM)(*it)->ctrl.hwnd);
                        } else if ((dwStyle & 0x0000000D) == 0x0000000D) {
                            RECT rc;
                            GetWindowRect((*it)->ctrl.hwnd, &rc);
    
                            POINT ptOrigin;
                            GetCursorPos(&ptOrigin);
    
                            INPUT inputs = {0};
                            inputs.type = INPUT_MOUSE;
                            inputs.mi.dx = (rc.left + (rc.right - rc.left) / 2) * 65535 / GetSystemMetrics (SM_CXSCREEN);
                            inputs.mi.dy = (rc.top +  (rc.bottom - rc.top) / 2) * 65535 / GetSystemMetrics (SM_CYSCREEN);
                            inputs.mi.mouseData = 0;
    
                            inputs.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
                            SendInput (1, &inputs, sizeof (INPUT));
                            inputs.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE;
                            SendInput (1, &inputs, sizeof (INPUT));
                            inputs.mi.dwFlags = MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE;
                            SendInput (1, &inputs, sizeof (INPUT));
    
    
                            //SendMessage ((*it)->ctrl.hwnd, WM_LBUTTONDOWN, 0, 0);
                            //SendMessage ((*it)->ctrl.hwnd, WM_LBUTTONUP,   0, 0);
                            
                            memset (&inputs, 0, sizeof (INPUT));
                            inputs.type = INPUT_MOUSE;
                            inputs.mi.dx = ptOrigin.x  * 65535 / GetSystemMetrics (SM_CXSCREEN);
                            inputs.mi.dy = ptOrigin.y * 65535 / GetSystemMetrics (SM_CYSCREEN);
                            inputs.mi.mouseData = 0;
                            inputs.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
                            SendInput (1, &inputs, sizeof (INPUT));
    
                        } else {
                            PostMessage ((*it)->ctrl.hwnd, WM_LBUTTONDOWN, 0, 0);
                            PostMessage ((*it)->ctrl.hwnd, WM_LBUTTONUP,   0, 0);
                        }
                    } else {
                        /**
                         * 如果没有父窗口的话, 还是发一个左键消息吧, 以免遗漏
                         */
                        PostMessage ((*it)->ctrl.hwnd, WM_LBUTTONDOWN, 0, 0);
                        PostMessage ((*it)->ctrl.hwnd, WM_LBUTTONUP,   0, 0);
                    }
  • 相关阅读:
    3.29Java流程控制语句之循环结构
    3.27Java自动类型转化
    3.27Java流程控制语句
    3.27字符串连接符
    计算机系统概论
    《算法导论》第12章 二叉查找树 (2)查找、插入与删除
    《算法导论》第14章 数据结构的扩张 (1)动态顺序统计
    《算法导论》第12章 二叉查找树 (3)基数树
    关于算法学习的总结和感悟(原创)
    《Windows游戏编程大师技巧》二、Windows编程模型
  • 原文地址:https://www.cnblogs.com/lin1270/p/2273530.html
Copyright © 2020-2023  润新知