实现一个鼠标或者键盘模拟器,可以完成很多功能,比如做一个简单的游戏外挂^_^。通常,模拟键盘鼠标事件有两种方法:

1.keybd_event, mouse_event

2.SendMessage, PostMessage

后者更强大,指定hwnd后可以后台发送对应的鼠标键盘消息,而后者只能够发送前台信息,也就是只能向前端窗口发送消息。

下面是简单的用法举例:

方法1:使用keybd_event, mouse_event

SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
keybd_event(k,0,0,0);keybd_event(k,0,KEYEVENTF_KEYUP,0);

方法2:使用SendMessage, PostMessage

向当前程序的ID为IDC_EDIT1的输入框输入字符:

HWND tw2 = GetDlgItem(IDC_EDIT1)->m_hWnd;
::SendMessage(tw2,WM_CHAR,s[i],0);

向ID为IDOK的按钮发送鼠标单击事件:

HWND tw3 = GetDlgItem(IDOK)->m_hWnd;
::SendMessage(tw3,WM_LBUTTONDOWN,0,0);::SendMessage(tw3,WM_LBUTTONUP,0,0);

向打开的记事本输入字符

wnd = ::FindWindow("notepad",   NULL);
wnd   =   FindWindowEx(wnd,0,"Edit",NULL); ::SendMessage(tw2,WM_CHAR,s[i],0);

如果说你不知道名字叫Edit,那么有下面的方法:

CWnd * pwnd = FindWindow("notepad",   NULL);
CWnd * p2 = pwnd->GetTopWindow();wnd = p2->m_hWnd;
::SendMessage(tw2,WM_CHAR,s[i],0);

如果连notepad也不知道的话,你可以使用进程ID:遍历进程池得到想要的进程ID,然后找到指定ID的hwnd

struct   EnumParam
{ HWND   hMainWnd; DWORD   dwProcessID; };
BOOL   CALLBACK   EnumWinProc(HWND   hwnd,   LPARAM   lParam) { DWORD   dwID; EnumParam*   pep   =   (EnumParam*)lParam; GetWindowThreadProcessId(hwnd,&dwID); if   (dwID   ==   pep->dwProcessID)   { pep->hMainWnd = hwnd;   return   0; } return   TRUE;
}EnumParam   ep; STARTUPINFO   si; PROCESS_INFORMATION   pi; ep.hMainWnd   =   NULL; memset(&si,   0,   sizeof(si)); si.cb   =   sizeof(STARTUPINFO); if   (CreateProcess(NULL,"notepad.exe   c:.txt", NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))   { CloseHandle(pi.hThread); CloseHandle(pi.hProcess); ep.dwProcessID   =   pi.dwProcessId; while(!ep.hMainWnd)   { EnumWindows((WNDENUMPROC)EnumWinProc,   (long)&ep); //没有下面的一行,CPU的使用率会高居不下,同时其它的程序 //也会执行的很慢(包括程序启动的Notepad.exe) if   (ep.hMainWnd==NULL)   Sleep(20);   } //EnumWindows((WNDENUMPROC)EnumWinProc, (long)&ep); } //此时的   ep.hMainWnd   就是你要的NodePad.exe窗口的句柄 //接下来由hwnd得到CWND *wnd = ep.hMainWnd;if(wnd == NULL) AfxMessageBox("Fasle");CWnd * tc = FromHandle(wnd);//获取wnd = tc->GetTopWindow()->m_hWnd;::SendMessage(tw2,WM_CHAR,s[i],0);
//OK啦

模拟键盘鼠标事件有两种方法相关推荐

  1. [转载]C#模拟键盘鼠标事件-SendKeys

    C#模拟键盘鼠标事件-SendKeys 2007-09-18 15:138596人阅读评论(1)收藏举报 1.模拟键盘事件 System.Windows.Forms.SendKeys以下是   Sen ...

  2. Python ctypes 调用API函数模拟键盘鼠标事件

    在Python编程中, 有时需要模拟键盘或鼠标事件, 自动操作计算机, 比如玩游戏等. 本文介绍使用ctypes模块调用API函数, 模拟键盘鼠标事件的方法. 目录 1.导入ctypes模块 2.通过 ...

  3. 中文顿号怎么输入_键盘上顿号怎么打出来 顿号用键盘打出来的两种方法

    顿号是我们标点符号中经常会使用的一种,在纸上书写的时候,大家只需要写一个一个斜划线即可,可是在电脑上输入,很多人往往不知道如何输入顿号.那么顿号在键盘上怎么打?顿号怎么打出来?下面脚本之家小编就为大家 ...

  4. strlen函数的用法及模拟实现strlen函数的两种方法

    strlen函数的用法及模拟实现strlen函数的两种方法 一.strlen函数的用法 strlen的简单应用 二.指针模拟实现strlen函数 三.递归模拟实现strlen函数 一.strlen函数 ...

  5. js循环添加事件的两种方法

    js循环添加事件的两种方法 选择下拉列表中的一个li将文本传到框中 问题:写此二级菜单时用到的方法不好,对此进行优化 原始js代码: <script>// 思路:1.点击下拉框a时,ul中 ...

  6. windows模拟键盘鼠标事件DirectX游戏中

    有一些使用DirectX接口的游戏程序,它们在读取键盘操作时绕过了windows的消息机制,而使用DirectInput.这是因为有些游戏对实时性控制的要求比较高,比如赛车游戏,要求以最快速度响应键盘 ...

  7. 在Activity中响应ListView内部按钮的点击事件的两种方法

    转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在 ...

  8. [转]C# winForm 自定义鼠标样式的两种方法

    本文转自:http://www.cnblogs.com/hzbzxm/archive/2008/09/15/1291104.html 以前试过在WinForm中自定义鼠标样式,结果显示出来的鼠标变成单 ...

  9. Cocos2d-x 处理双击事件的两种方法

    在cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现. 下面介绍两种方式实现双击事件的处理. (一 ...

最新文章

  1. Spring Framework 5.2.5 发布,增加对 Java 14 的支持
  2. 一篇blog带你了解java中的锁
  3. mybatisplus修改单个属性_Mybatis Plus 中 参数传递的优化之路
  4. 对讲业务对讲过程中的几个状态
  5. 财经法规税收征收管理法律制度练习题二
  6. html转换pdf软件,html转换成高质量的PDF文件[跨平台开源软件]
  7. 蓝桥杯 基础练习 01字串(水题)
  8. R语言实现故障树定量与定性分析——以GJB-Z 768A-1998 故障树分析指南图5.37为例
  9. 【渝粤教育】电大中专沟通技巧_1作业 题库
  10. 强化学习(8):Asynchronous Advantage Actor-Critic(A3C)算法
  11. 嘉楠科技多位高管退出,知情人称管理层夺权内斗
  12. 用计算机写高中数学程序框图,画“程序框图”,高中数学最实用基本技能之一...
  13. 如何将逐小时数据处理为逐日数据
  14. Juniper SRX340防火墙配置
  15. 如何关闭/屏蔽百度搜索结果的置顶广告?(无耻的百度关了又自己开启)
  16. 2023年直播行业的困境是什么?未来有哪些发展趋势?
  17. SmtpJS发送邮件教程
  18. anr用户无响应问题的解决
  19. 如何在高压系统中实现电源和信号线的电气隔离
  20. 粒子群算法 PSO(Particle Swarm Optimization)——原理及实现

热门文章

  1. ipv4和ipv6与int互转通用处理方式
  2. OpenCV Mat与uchar*指针相互转换赋值
  3. isDebugEnabled作用
  4. cublas_学习笔记2
  5. Cookie跨域setDomain
  6. 彻底搞懂递归的时间复杂度
  7. Python-子列表最大长度
  8. 华为p10android版本,华为P10系列什么时候升级安卓8.0?官方给出答案
  9. Android HorizontalScrollView和ScrollView 水平滚动 垂直滚动
  10. Scaled-YOLOv4: Scaling Cross Stage Partial Network 论文翻译