如何模拟ue4中的键盘按键输入自动输入文字

C++ Builder 5 模拟键盘按键 自动输入文字
出处:电脑爱好者&
作者:周世攀&
责任编辑:zwg&
AttachThreadInput()函数的原形如下:
BOOL AttachThreadInput(
DWORD idAttach, // 需要附加的线程ID
DWORD idAttachTo, // 附加到的线程ID
BOOL fAttach // true 附加 false 取消
函数使用的过程大致如下:
hWnd = GetForegroundWindow(); // 得到当前窗口
if (hWnd == Form1->Handle) // 排除程序本身的窗口
DWORD FormThreadID = GetCurrentThreadId(); // 本程序的线程ID
// 当前窗口的线程ID
DWORD CWndThreadID = GetWindowThreadProcessId(hWnd, NULL);
// 附加输入线程
AttachThreadInput(CWndThreadID, FormThreadID, true);
// 得到当前键盘光标所在的窗口
hWnd = GetFocus();
// 取消附加的输入线程
AttachThreadInput(CWndThreadID, FormThreadID, false);
  hWnd就是当前键盘光标所在的窗口句柄。另外,经过测试发现,在Windows2000系统下发送字符消息(WM_CHAR)时,如果字符是一个汉字,则该字符对应的虚拟键盘码高位不为0,这样得到的字符就不正确。解决办法是做一个“与”运算: ch & 0xFF就可以了。
键盘也能翻页,试试“← →”键
相关软件:有问题 @ 爱问Powered
举报原因(必选):
广告或垃圾信息
不雅词句或人身攻击
激进时政或意识形态话题
侵犯他人隐私
其它违法和不良信息&>&&>&开发技术&>&C++&>&模拟键盘按键 自动输入文字
模拟键盘按键 自动输入文字
上传大小:33KB
模拟键盘按键 自动输入文字
综合评分:3.8(49位用户评分)
所需积分:
下载个数:252
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有16条
很有用,谢谢了
很有用,学习了。
详细还算详细啦
很好的东西,挺详细的
东西还是比较详细的,很不错。
美中不足是不能输入中文
挺有用的 美中不足是不能输入中文唉
详细还算详细啦
挺详细的。
不是源代码
审核通过送C币
opencv3基础入门
创建者:xyz59886
C++经典书籍
创建者:revofu
Linux C/C++编程
积分&1277019
上传者其他资源上传者专辑
基于JSP+Struts+JDBC的个人通讯录管理系统
Jfree最新源码
汉字识别.rar
JasperReport 与iReport 的配置与使用
开发技术热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
模拟键盘按键 自动输入文字
会员到期时间:剩余下载个数:
请勿使用迅雷下载
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
VIP年卡全年1200个资源免积分下载
请勿使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:编程入门网-C++ Builder 5 模拟键盘按键 自动输入文字
您的位置: &&
C++ Builder 5 模拟键盘按键 自动输入文字
文章来源:电脑爱好者 作者:周世攀
模拟键盘按键 自动输入文字
   键盘对于每个操作电脑的人员来说是最熟悉不过的了。键盘上的按键可分为两类: 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字键等,我们称之为字符键;按下后虽然看不到字符但会产生控制作用的按键,如回车键、光标键等,我们称之为控制键。
  对于程序员来说,键盘上的每个按键都一样,无非是不同按键产生的键盘扫描码不同。在不同的操作系统下,键盘扫描码常常被转换为不同的编码以方便应用程序调用,比如在DOS系统下的ASCII码,在Windows系统下的虚拟键盘码等等。
  有时我们希望能以程序的方式模拟键盘按键,以达到自动输入文字或者控制操作的目的。在DOS系统下通常使用中断调用,产生键盘的扫描码的方法来实现。在Windows 系统下,由于Windows本身的一些限制和特点,一般不直接使用中断调用。
  了解一点Windows编程的朋友应该知道, Windows系统是通过消息的传递(或称事件的发生)来控制各个应用程序的执行和数据通信的。例如:应用程序打开和关闭会产生相应的窗口消息,鼠标的移动、点击动作会产生相应的鼠标消息,同样键盘的按下、弹起也会产生相应的键盘消息。那么如果用程序产生键盘消息,也就达到了模拟键盘按键的目的。
  有了这样的思路,我们现在就来实验一下。
  首先要知道在Windows系统中与键盘按键相关的消息有:WM_KEYDOWN、WM_KEYUP、 WM_SYSKEYDOWN、WM_SYSKEYUP、WM_CHAR等。其中,WM_KEYDOWN为键按下,WM_KEYUP为键弹起,WM_SYSKEYDOWN为系统键按下,WM_SYSKEYUP为系统键弹起,WM_CHAR为按键对应的字符。
  要模拟键盘产生键盘消息,我们就发送一条键盘消息给指定窗口。比如要模拟一个字母键“A”,可以这样:PostMessage(hWnd, WM_CHAR, 'A', 0); 模拟按一个回车:PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0)。这里的关键问题是要确定窗口句柄(hWnd),使用GetFocus()函数可以得到键盘光标所在窗口句柄,但该函数只能得到当前进程内的窗口句柄。
  如果要得到其他应用程序的键盘光标所在窗口句柄,需要调用 AttachThreadInput()函数。该函数的作用就是将其他窗口线程的输入附加到本窗口线程的输入操作中,这样就可以调用GetFocus()函数得到其他窗口的句柄了。
  与2001年第24期程序谷刊登的《如何写一个聊天辅助程序》一文中作者使用ChildWindowFromPointEx的方法相比,使用AttachThreadInput似乎更能够使键盘模拟具有通用性。
AttachThreadInput()函数的原形如下:
BOOL AttachThreadInput(
DWORD idAttach, // 需要附加的线程ID
DWORD idAttachTo, // 附加到的线程ID
BOOL fAttach // true 附加 false 取消
函数使用的过程大致如下:
hWnd = GetForegroundWindow(); // 得到当前窗口
if (hWnd == Form1->Handle) // 排除程序本身的窗口
DWORD FormThreadID = GetCurrentThreadId(); // 本程序的线程ID
// 当前窗口的线程ID
DWORD CWndThreadID = GetWindowThreadProcessId(hWnd, NULL);
// 附加输入线程
AttachThreadInput(CWndThreadID, FormThreadID, true);
// 得到当前键盘光标所在的窗口
hWnd = GetFocus();
// 取消附加的输入线程
AttachThreadInput(CWndThreadID, FormThreadID, false);
  hWnd就是当前键盘光标所在的窗口句柄。另外,经过测试发现,在Windows2000系统下发送字符消息(WM_CHAR)时,如果字符是一个汉字,则该字符对应的虚拟键盘码高位不为0,这样得到的字符就不正确。解决办法是做一个“与”运算: ch & 0xFF就可以了。
 下面又到了给出例程的时间了。例程“刷刷刷”能够在键盘光标所在的文本输入框中自动输入文字(中文、英文、数字),程序使用C++ Builder 5开发。首先运行C++ Builder并新建工程。接着,将窗体Form1的边框样式(BorderStyle)改为对话框(bsDialog),并放置相应控件如图所示,其中SS_Text是一个用于输入文本的TComboBox控件,当然,你可以在设计阶段预先向控件中输入一些常用文本,以便程序运行后可以直接选用; txtTimes和txtDelay为TEdit控件,分别用于控制发送文本的次数和间隔时间;chkAutoWrap和chkAutoNumber为TCheckBox控件,决定是否在每一行发送文本后面自动回车或自动加记数编号; 以上控件包含在Panel1(TPanel控件)中; Timer1用于控制循环发送和时间间隔。
下面是程序清单:
//--------------------------------------------
#pragma hdrstop
#include "Unit1.h"
//--------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
int nTotalTimes, // 发送本文的总次数
nT // 已经发送的次数
TForm1 *Form1;
//--------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
//--------------------------------------------
void __fastcall TForm1::btnStartClick(TObject *Sender) // 开始刷屏
{ if (SS_Text->Text.IsEmpty())
// 文本不能为空
ShowMessage("请输入刷刷文本!");
SS_Text->SetFocus();
// Timer1->Interval取值为n秒(最小为50毫秒)
int Interval = StrToInt(txtDelay->Text);
Timer1->Interval = (Interval > 0) ? Interval * 1000 : 50;
// nTotalTimes取值为n次(最小为0次)
nTotalTimes = StrToInt(txtTimes->Text);
if (nTotalTimes < 0)
nTotalTimes = 0;
nTimes = 0;
Timer1->Enabled =
__except(EXCEPTION_EXECUTE_HANDLER)
ShowMessage("请输入数值类型数据!");
btnStart->Enabled =
btnStop->Enabled =
Panel1->Enabled =
Application->Minimize(); // 最小化刷刷窗口
//--------------------------------------------
void __fastcall TForm1::btnStopClick(TObject *Sender)// 停止刷屏
Timer1->Enabled =
btnStart->Enabled =
btnStop->Enabled =
Panel1->Enabled =
//--------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
// 现刷屏nTimes次,到nTotalTimes次后完成。
if (nTimes == nTotalTimes)
btnStopClick(Sender);
hWnd = GetForegroundWindow(); // 得到当前窗口
if (hWnd == Form1->Handle) // 不需要程序本身的窗口
DWORD FormThreadID = GetCurrentThreadId();
DWORD CWndThreadID = GetWindowThreadProcessId(hWnd, NULL);
// 附加输入线程
AttachThreadInput(CWndThreadID, FormThreadID, true);
hWnd = GetFocus(); // 得到当前键盘光标所在的窗口
AttachThreadInput(CWndThreadID, FormThreadID, false); // 取消
if (hWnd == NULL)
for (int i = 1; i Text.Length(); i++)
{ // 模拟键盘按键输入文本
PostMessage(hWnd, WM_CHAR, (WPARAM)(SS_Text->Text[i] & 0xFF), 0);
if (chkAutoNumber->Checked)
{ // 自动编号
AnsiString Lines = IntToStr(nTimes);
for (int j = 1; j <= Lines.Length(); j++)
PostMessage(hWnd, WM_CHAR, (WPARAM)(Lines[j]), 0);
if (chkAutoWrap->Checked) // 自动回车
PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
//---------------------------------------------
本程序在Windows 2000 + C++ Builder 5下编译通过。源程序下载地址是:http://www./qikan/ cxg/0206mnj.zip。
Copyright&
Powered by 编程入门网 All Rights Reserved. |}

我要回帖

更多关于 按键精灵键盘输入 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信