一、任务要求。

  需要我们编写一个程序能够自动的进行某些鼠标点击的操作。比如某个客户端,我们利用程序,可以自动点击操作。

二、需求分析。

  为了实现这种要求,我们必须首先获得需要操作窗口的句柄。其次是点击的位置。

  1.获取窗口的句柄。

    我们需要明确,我们在获得窗口的句柄时,要明确我们窗口是不是顶级窗口。因为我们获取窗口的函数(FindWindow()),是在顶层窗口中查找的。或者利用其它API从最顶层的位置向下索引。这些都要根据我们要操作窗口的位置来决定的。在本程序中,我们是利用顶层窗口的句柄,然后利用距离顶层窗口起始点的相对位置来进行模拟鼠标点击。

  2.点击位置。

    点击位置的确定需要注意的一点是,我们用按键精灵的抓抓工具时,上面的相对位置是客户区的相对位置,并不是距离顶层窗口起始点的相对位置。

三、工具

  1.按键精灵的抓抓工具、vs2017。

四、代码实现

1 int mousemove(int x, int y) {
2     ::SetCursorPos(x, y);
3     mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
4     return 0;
5 }

模拟点击

 1 bool mouse_down(string titlename, int position_x, int position_y) {
 2     HWND hd_desk = GetDesktopWindow();
 3
 4     HWND hd = GetWindow(hd_desk, GW_CHILD);        //得到屏幕上第一个子窗口
 5     char s[200] = { 0 };
 6     std::cout << "enter in" << std::endl;
 7     while (hd != NULL)                    //循环得到所有的子窗口
 8     {
 9         memset(s, 0, 200);
10         GetWindowText(hd, s, 200);
11         //GetClassName(hd, s, 200);
12         string b(&s[0], &s[strlen(s)]);
13         if (b ==titlename) {       //Notepad
14             RECT rect;
15             GetWindowRect(hd, &rect);
16             int w = rect.right - rect.left, h = rect.bottom - rect.top;
17             std::cout << "宽:" << w << " " << "高:" << h << std::endl;
18             std::cout << "rect.left:" << rect.left << " " << "rect.top:" << rect.top << std::endl;
19             //SetWindowPos(hd, HWND_TOPMOST, rect.left, rect.top,  w, h, NULL);
20             //int bool_break = TRUE;
21             int num = 0;
22             while (TRUE) {
23                 int mouse_x = rect.left + position_x;
24                 int mouse_y = rect.top + position_y;
25                 mousemove(mouse_x, mouse_y);
26                 num++;
27                 if (NULL == FindWindow(NULL, s)||num==10) {
28                     break;
29                 }
30             }
31         std::cout << "find it" << std::endl;
32
33
34
35
36             //模拟点击事件
37
38             //mousemove(rect.left + 180, rect.top + 210 + 240);
39             //::SetCursorPos(lpPoint.x, lpPoint.y);
40             //SetWindowPos(hd, HWND_NOTOPMOST, rect.left, rect.top, w, h, NULL);
41             break;
42         }
43         hd = GetNextWindow(hd, GW_HWNDNEXT);
44     }
45 }

点击实现

五、代码分析

  1.模拟点击。

    利用的是Windows API。首先移动鼠标到需要点击的位置,然后,调用点击函数。

  2.点击实现。

    首先参数是:1.窗口的标题,用抓抓工具可以获得。2.相对位置x,3.相对位置Y。

    需要注意的一点是,我这个功能是关闭某个窗口的操作,所以用是否是NULL来确定是否完成点击。

转载于:https://www.cnblogs.com/meikon/p/9683258.html

获取窗口句柄模拟鼠标点击相关推荐

  1. python鼠标点击位置_python鼠标点击位置 Python3怎么模拟鼠标点击?

    Python3怎么模拟鼠标点击? Python3怎么模拟鼠标点击?最好简单一点的方法 import win32api,win32condef click(x,y): win32api.SetCurso ...

  2. CTreeCtrl::SelectItem 光标 模拟鼠标点击

    CTreeCtrl::SelectItem 光标 模拟鼠标点击 (2010-12-02 17:37:14) 转载▼ 标签: selectitem 光标 模拟鼠标 分类: C /VC/WM/MFC 我想 ...

  3. java 窗口鼠标句柄_c#获取窗体句柄模拟鼠标点击

    [实例简介] c#获取窗体句柄模拟鼠标点击实例2012年8月20日23:48:21,代码清楚,有详细注释,希望对大家有用 [实例截图] [核心代码] 获取窗体句柄模拟鼠标点击 └── 获取窗体句柄模拟 ...

  4. Windows下C/C++模拟鼠标点击,PC端没有鼠标设备也能够获取鼠标坐标、移动鼠标坐标、模拟鼠标点击事件,方法一 亲测有效

    ------- [ 转载请保留 ] ------- 作者:西_瓜_瓜 博客:https://blog.csdn.net/xi_gua_gua/article/details/105773298 --- ...

  5. Qt实现Linux下模拟点击界面,如何利用QT实现模拟鼠标点击?

    QT入门,windows开发入门选手. 我想利用QT实现一个模拟鼠标点击的功能(Windows平台),具体来说是这样的:首先获取某个特定名称窗口的句柄,然后再模拟单击这个窗口的特定位置,并且要求窗口可 ...

  6. Qt5 模拟鼠标点击

    windows官方说明:https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-mouse_event?redire ...

  7. Windows10系统Python语言利用Pywin32模块模拟鼠标点击

    Python模块pywin32包装了几乎所有的Windows API,可以方便地直接调用,非常方便. 几个步骤: 1. 检测小弹窗是否弹出: 2. 确定小弹窗中"确定"按钮的位置: ...

  8. php 模拟鼠标点击,Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例)...

    Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例) 环境 python3 依赖 PyAutoGUI 简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动 ...

  9. WINCE下模拟鼠标点击,移动

    最近进行一个车载项目, 碰到这样的需求: 通过串口接收鼠标的按下/弹起和坐标消息, 在WINCE下模拟鼠标消息.经过努力, 得出了两个方案: 1. 使用广播发送鼠标消息 2. 使用mouse_even ...

最新文章

  1. 麻省理工人工智能实验室发现更小更容易训练的神经网络
  2. javascript设计模式学习日记--模板方法模式
  3. MyEclipse 清理项目缓存的几大方法
  4. 在DataGrid中合并单元格行
  5. HFS远程命令执行漏洞复现
  6. linux汇编字符长怎么看,linux – 在内联GNU汇编程序中获取字符串长...
  7. (79)Verilog HDL系统函数和任务:$write
  8. SASS+COMPASS 自适应 学习笔记
  9. wordpress导入数据错误MySQL返回:#1273 – Unknown collation:’utf8mb4_unicode_ci’
  10. 【JAVA程序设计】(C00075)基于SSM的网上汽车租赁管理系统
  11. 解决ubuntu16.04无法打开网易云音乐
  12. Premiere Pro CC2019安装详细教程
  13. .net5 开启Lucene的全文搜索之旅
  14. 精确率/召回率/准确率
  15. 华为云云商店星品入“沪”,加速产业数字共赢!
  16. 容联云AI商业大会:在商业场景下,自然语言处理如何联动决策智能共同发展?
  17. 未办理过业务被多收费 中移动屡遭客户投诉乱收费
  18. GROMACS 分子模拟使用
  19. Hdu3833 YY's new problem 哈希表(3)
  20. 计算机中总评等级怎么算,Excel总评等级怎么算

热门文章

  1. Socket异步通信——使用SocketAsyncEventArgs
  2. Git与Ftp协同工作
  3. Silverlight游戏设计(Game Design):(四)从零开始搭建游戏主体框架
  4. 基于中间代码的优化中,循环的查找算法有哪些?循环优化的方法有哪些?举例说明。
  5. sqlplus连mysql库_sqlplus连接服务器的Oracle的经历
  6. libpython3.7m so静态库_Linux下编译安装python3.7
  7. python爬虫接单经历_一个Python小白5个小时爬虫经历
  8. 计算机公共课考试试题,2019-度公共课计算机应用基础考试试题附答案.doc
  9. 织梦 m list.php tid,在织梦标签dede:list中增加noflag属性的方法支持5.7版本
  10. shmmax单位_linux 内存管理——内核的shmall 和shmmax 参数