// MFDlg.cpp: 实现文件
//#include "stdafx.h"
#include "MF.h"
#include "MFDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// CMFDlg 对话框CMFDlg::CMFDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_MF_DIALOG, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CMFDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CMFDlg, CDialogEx)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_ADOWN, &CMFDlg::OnBnClickedAdown)ON_BN_CLICKED(IDC_BUTTON2, &CMFDlg::OnBnClickedButton2)
END_MESSAGE_MAP()// CMFDlg 消息处理程序BOOL CMFDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);           // 设置大图标SetIcon(m_hIcon, FALSE);        // 设置小图标// TODO: 在此添加额外的初始化代码return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。void CMFDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CMFDlg::OnBnClickedAdown()
{HWND HandleText, HandleEdit;//以分别定义两个句柄,用来接收记事本的句柄以及记事本中编辑框的句柄HandleText = ::FindWindow(TEXT("Notepad"), TEXT("rr.txt - 记事本"));//接收记事本的句柄,可以用spy++来查其句柄if (HandleText == NULL){::MessageBox(NULL, TEXT("没能找到窗口!"), TEXT("提示"), 0);}HandleEdit = ::FindWindowEx(HandleText, NULL, TEXT("Edit"), NULL);//接收编辑框的句柄const BYTE A = 'A';::PostMessage(HandleEdit, WM_KEYDOWN, A, 0);//发送按下‘A’消息到编辑框Sleep(100);::PostMessage(HandleEdit, WM_KEYUP, A, 0);//发送按起‘A’消息到编辑框// TODO: 在此添加控件通知处理程序代码
}void CMFDlg::OnBnClickedButton2()
{HWND HandleText, HandleEdit;HandleText = ::FindWindow(TEXT("Notepad"), TEXT("rr.txt - 记事本"));if (HandleText == NULL){::MessageBox(NULL, TEXT("没能找到窗口!"), TEXT("提示"), 0);}HandleEdit = ::FindWindowEx(HandleText, NULL, TEXT("Edit"), NULL);const BYTE B = 'B';::PostMessage(HandleEdit, WM_KEYDOWN, B, 0);Sleep(100);::PostMessage(HandleEdit, WM_KEYUP, B, 0);
}

由于只是个简单的示范,就不详细记录了,最主要的函数是其中下面这一块:

void CMFDlg::OnBnClickedAdown()
{HWND HandleText, HandleEdit;//以分别定义两个句柄,用来接收记事本的句柄以及记事本中编辑框的句柄HandleText = ::FindWindow(TEXT("Notepad"), TEXT("rr.txt - 记事本"));//接收记事本的句柄,可以用spy++来查其句柄if (HandleText == NULL){::MessageBox(NULL, TEXT("没能找到窗口!"), TEXT("提示"), 0);}HandleEdit = ::FindWindowEx(HandleText, NULL, TEXT("Edit"), NULL);//接收编辑框的句柄const BYTE A = 'A';::PostMessage(HandleEdit, WM_KEYDOWN, A, 0);//发送按下‘A’消息到编辑框Sleep(100);::PostMessage(HandleEdit, WM_KEYUP, A, 0);//发送按起‘A’消息到编辑框
}

其中值得一说的就是PostMessage函数,FindWindow函数,其定义如下:

FindWindow:

(FindWindowEx函数只不过加了个父窗口句柄而已)

PostWindow:

此函数值得一提的是LPARAM和WPARAM参数,在这里,WPARAM参数代表的是消息的ID号,而LPARAM参数表示的则是虚拟键码,虚拟键码前面有记录。

效果如下图所示,当单击按键A或单击按键B时就会相当于按了键盘上的A或B(没仔细处理虚拟按键。。。罪过罪过)

一些游戏脚本原理应该和这个差不多吧???

键盘按键模拟程序示例相关推荐

  1. Linux键盘按键中断驱动示例

    Linux下中断驱动中最典型的就是键盘驱动了,在初始化的时候调用request_irq注册中断,在退出的时候free_irq释放中断.下面是示例: keyboardInt.h #ifndef _KEY ...

  2. python检测键盘按键命令_python实时检测键盘输入函数的示例

    在嵌入式.尤其是机器人的python编程中,经常需要实时检测用户的键盘输入来随时控制机器人,这段代码可以帮助我们提取用户输入的字符,并在按下键盘的时候作出反应. import sys import t ...

  3. html 键盘按键与按钮功能关联

    键盘中每个按键都对应一个数值,通过匹配进行功能函数得划分,主要使用得是键盘按键事件,onkeydown;案例如下: <!DOCTYPE html> <html > <he ...

  4. fifa11键盘按键_FIFA 20 Player集群

    fifa11键盘按键 路线图 (Roadmap) Introduction 介绍 Data Exploration 数据探索 Player Classification1 - K-Nearest Ne ...

  5. VUE·17:事件处理之 @keyup、@keydown 等键盘按键触发及 @keyup.enter 等别名

    一.keyup · 最常用的键盘按键模式 1.原理 只要按下按键,如果不抬起手来,就不会触发事件.只有将按键抬起,这个事件才算是触发. 2.代码示例 2.1 我们可以控制按下哪个键才能 触发事件,而其 ...

  6. delphi XE模拟Android手机PDA设备的虚拟键盘按键及扫码过程输入焦点及信号接收

    delphi XE模拟Android手机PDA设备的虚拟键盘按键及扫码过程输入焦点及信号接收 今天,群里有几位同学讨论这个问题,汇总了一下,分享出来,供同学们学习研究. 一.直接上代码示例 1.屏蔽应 ...

  7. vue绑定键盘事件无效问题,vue绑定键盘delete事件示例,组合键绑定

    项目有个需求,点击某个组件,按delete健后删除,于是乎第一就是想到了键盘事件 @keyup.delete='deleteKeyup(e)' 可是按delete键试了半天都没反应,加了.native ...

  8. 检测键盘按键的网格的交叉点

    对应示例程序: measure_grid.hdev 目标:检测键盘按键的网格的交叉点 思路为:       1.读取图像       2.利用均值滤波 阈值分割 形态学处理 常用的Blob分析方法等, ...

  9. java获取鼠标在窗口_Java获取窗口鼠标坐标以及键盘按键

    Java中的鼠标和键盘事件 1.使用MouseListener借口处理鼠标事件 鼠标事件有5种:按下鼠标键,释放鼠标键,点击鼠标键,鼠标进入和鼠标退出 鼠标事件类型是MouseEvent,主要方法有: ...

最新文章

  1. libnet apply method
  2. 优化JS加载时间过长的一种思路
  3. pandas - 案例(股票分析)
  4. boost::hana::drop_while用法的测试程序
  5. 编译QT出错 Basic XLib functionality test failed!
  6. Any problem in computer science can be solved with another layer of indirection
  7. 本田crv混动操作手册_【广汽本田】不只是奶爸车 新出行试驾本田奥德赛锐混动...
  8. 一个IT青年北漂四年的感悟
  9. 每个电脑都会自己的SID号和GUID号,而且不会相同。。
  10. 为什么ctrl+shift+方向键不管用了_键盘侠丨Shift键的快捷运用
  11. Redis数据结构04-SortedSet
  12. SpringBoot项目的mybatis逆向工程
  13. 【sklearn第十九讲】高斯混合模型
  14. 关于学习 unity3D 的知识预储备
  15. 详解Photoshop中标尺工具和参考线的使用方法
  16. 前端小白找工作日记(1)
  17. python爬虫笔记(1)
  18. TencentOS-Tiny之GCC
  19. 头歌:《C语言程序设计编程实践任务》教学团队:祁文青:选择结构程序设计
  20. 利用Python自动生成请假条,实现高效摸鱼

热门文章

  1. 2021世界燕窝展|上海滋补品展之燕窝女人,年轻态、健康态
  2. c++11-消息总线库
  3. 玩一玩react-360
  4. POJ 1851 Map 笔记
  5. OJ密码岛 1851. 过河卒(Noip2002)
  6. Win10 无法安装到GPT分区形式磁盘,不格式化磁盘解决方案
  7. 人脸识别标注的68个特征
  8. ci中使用phpExcel
  9. iphone5隐藏应用_iPhone的5个很棒的生产力应用程序
  10. UE4使用MediaPlayer播放视频没有声音