键盘按键模拟程序示例
// 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(没仔细处理虚拟按键。。。罪过罪过)
一些游戏脚本原理应该和这个差不多吧???
键盘按键模拟程序示例相关推荐
- Linux键盘按键中断驱动示例
Linux下中断驱动中最典型的就是键盘驱动了,在初始化的时候调用request_irq注册中断,在退出的时候free_irq释放中断.下面是示例: keyboardInt.h #ifndef _KEY ...
- python检测键盘按键命令_python实时检测键盘输入函数的示例
在嵌入式.尤其是机器人的python编程中,经常需要实时检测用户的键盘输入来随时控制机器人,这段代码可以帮助我们提取用户输入的字符,并在按下键盘的时候作出反应. import sys import t ...
- html 键盘按键与按钮功能关联
键盘中每个按键都对应一个数值,通过匹配进行功能函数得划分,主要使用得是键盘按键事件,onkeydown;案例如下: <!DOCTYPE html> <html > <he ...
- fifa11键盘按键_FIFA 20 Player集群
fifa11键盘按键 路线图 (Roadmap) Introduction 介绍 Data Exploration 数据探索 Player Classification1 - K-Nearest Ne ...
- VUE·17:事件处理之 @keyup、@keydown 等键盘按键触发及 @keyup.enter 等别名
一.keyup · 最常用的键盘按键模式 1.原理 只要按下按键,如果不抬起手来,就不会触发事件.只有将按键抬起,这个事件才算是触发. 2.代码示例 2.1 我们可以控制按下哪个键才能 触发事件,而其 ...
- delphi XE模拟Android手机PDA设备的虚拟键盘按键及扫码过程输入焦点及信号接收
delphi XE模拟Android手机PDA设备的虚拟键盘按键及扫码过程输入焦点及信号接收 今天,群里有几位同学讨论这个问题,汇总了一下,分享出来,供同学们学习研究. 一.直接上代码示例 1.屏蔽应 ...
- vue绑定键盘事件无效问题,vue绑定键盘delete事件示例,组合键绑定
项目有个需求,点击某个组件,按delete健后删除,于是乎第一就是想到了键盘事件 @keyup.delete='deleteKeyup(e)' 可是按delete键试了半天都没反应,加了.native ...
- 检测键盘按键的网格的交叉点
对应示例程序: measure_grid.hdev 目标:检测键盘按键的网格的交叉点 思路为: 1.读取图像 2.利用均值滤波 阈值分割 形态学处理 常用的Blob分析方法等, ...
- java获取鼠标在窗口_Java获取窗口鼠标坐标以及键盘按键
Java中的鼠标和键盘事件 1.使用MouseListener借口处理鼠标事件 鼠标事件有5种:按下鼠标键,释放鼠标键,点击鼠标键,鼠标进入和鼠标退出 鼠标事件类型是MouseEvent,主要方法有: ...
最新文章
- tcmalloc mysql 缓存_Tcmalloc优化Mysql内存管理
- RDKit:化学指纹(Chemical Fingerprinting)
- RDKit:计算不同分子或构象之间的RMSD
- # 内存屏障:骇客的硬件视角(1)
- 流浪:从南海到北海,面朝大海,春暖花开。
- SpringBoot解耦的扩展机制 Spring Factories介绍及使用
- 任务分配算法c语言,基于蚁群算法多Agent任务分配方法.pdf
- DevOps是微服务的秘方
- SQL 高效的万能分页存储过程
- java并发编程(十)使用wait/notify/notifyAll实现线程间通信
- interpreter_command_state pattern
- 安装SQL Server2012时出现启用Windows功能NetFx3时出错”的提示,导致无法安装成功
- 【KE特效仿制】假面骑士 EX-AID NCOP+无彩限的怪灵世界 NCOP
- GetTickCount函数在linux下的实现
- CoAP协议服务器,CoAP协议
- 创建模式之工厂、工厂方法、抽象工厂与建造者(builder)
- 华为鸿蒙电视机65寸,华为电视65寸哪个型号性价比高_华为电视65寸哪个型号好...
- 树莓派4B安装opencv4【详解】
- 【无标题】华为ict网络赛道练习题
- 【单片机基础】ADC0832详解