// 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. tcmalloc mysql 缓存_Tcmalloc优化Mysql内存管理
  2. RDKit:化学指纹(Chemical Fingerprinting)
  3. RDKit:计算不同分子或构象之间的RMSD
  4. # 内存屏障:骇客的硬件视角(1)
  5. 流浪:从南海到北海,面朝大海,春暖花开。
  6. SpringBoot解耦的扩展机制 Spring Factories介绍及使用
  7. 任务分配算法c语言,基于蚁群算法多Agent任务分配方法.pdf
  8. DevOps是微服务的秘方
  9. SQL 高效的万能分页存储过程
  10. java并发编程(十)使用wait/notify/notifyAll实现线程间通信
  11. interpreter_command_state pattern
  12. 安装SQL Server2012时出现启用Windows功能NetFx3时出错”的提示,导致无法安装成功
  13. 【KE特效仿制】假面骑士 EX-AID NCOP+无彩限的怪灵世界 NCOP
  14. GetTickCount函数在linux下的实现
  15. CoAP协议服务器,CoAP协议
  16. 创建模式之工厂、工厂方法、抽象工厂与建造者(builder)
  17. 华为鸿蒙电视机65寸,华为电视65寸哪个型号性价比高_华为电视65寸哪个型号好...
  18. 树莓派4B安装opencv4【详解】
  19. 【无标题】华为ict网络赛道练习题
  20. 【单片机基础】ADC0832详解

热门文章

  1. 资产监测技术保障大棚养鹅
  2. 谈谈火星坐标与地图坐标的那点坑
  3. 水浒传水果拉霸类游戏物体旋转思路
  4. Nitro League 获得 500 万美元融资,由 SL2 Capital 领投,26 家机构参投
  5. ImageView实现图片适屏与裁剪
  6. yate sip 服务端和客服端 搭建
  7. Subresource Integrity(子资源一致性)和JS DDos 攻击
  8. 南怀瑾谈睡眠养生:如何才能少睡不困?
  9. 通过API获取定位、手机等
  10. iPhone se上市了