文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院工具软件文字输入模拟键盘按键 自动输入文字
精品推荐
特别推荐
·输入法技巧放送:极点五笔技巧两则
·模拟键盘按键 自动输入文字
·你知道吗?IE地址栏中还能输入这些东西
·[韩服]韩文输入法教程
·Win 2000/XP系统输入法丢失解决方法
·极品五笔的安装方法
·拼音五笔输入法技巧集
·智能ABC输入法实用技巧
·五笔二级简码--五笔字型
·让打字更快!搜狗拼音输入法八大妙用
热点TOP10
·如何显示输入法图标(输入法图标消失)
·[图文]五笔字根表
·输入法技巧放送:极点五笔技巧两则
·IE7在vista下无法使用五笔输入(86)
·Word:轻松输入“日语问候语”
·极品五笔的安装方法
·C++中的文件输入/输出(4):检测输入/输出的状态标志
·让打字更快!搜狗拼音输入法八大妙用
·[图文]一级简码--五笔字型
·[组图]五笔字根拆分

模拟键盘按键 自动输入文字

日期:2008年6月19日 作者: 查看:[大字体 中字体 小字体]


模拟键盘按键 自动输入文字

  键盘对于每个操作电脑的人员来说是最熟悉不过的了。键盘上的按键可分为两类: 按下后会在电脑的输入窗口上出现对应字符的按键,如字母键和数字键等,我们称之为字符键;按下后虽然看不到字符但会产生控制作用的按键,如回车键、光标键等,我们称之为控制键。
  对于程序员来说,键盘上的每个按键都一样,无非是不同按键产生的键盘扫描码不同。在不同的操作系统下,键盘扫描码常常被转换为不同的编码以方便应用程序调用,比如在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 hWnd;

hWnd = GetForegroundWindow(); // 得到当前窗口

if (hWnd == Form1->Handle) return; // 排除程序本身的窗口

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用于控制循环发送和时间间隔。

下面是程序清单:

//--------------------------------------------

#include

#pragma hdrstop

#include "Unit1.h"

//--------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"



[1] [2] [3] 下一页 




上一篇:易语言在中等职业学校计算机专业课程中的作用

下一篇:WINAPI使用 GDI作图

相关文章:
·CorelDRAW文字排版的技巧
·键盘的使用与指法训练
·如何显示输入法图标(输入法图标消失)
·CorelDRAW13文字排版详解
·模拟城市4秘籍
·添加或删除启动时自动运行的程序
·输入法技巧放送:极点五笔技巧两则
·制作全自动Windows XP 64位安装光盘(1)
·用Photoshop打造非主流个性文字
·IE7在vista下无法使用五笔输入(86)
相关软件:
·模拟城市3000(Sim City 3000)简体中文版
·300多种中文字体
·NDS《逆转裁判4 完美汉化简体中文版》模拟器
·兽血沸腾(全文字版)
·整形模拟软件_非常face V1.0
·GHOST全自动备份还原系统光盘V3.0
·紫光华宇拼音输入法V6-Final
·《铁拳5》模拟器
·模拟人生 2
·《拳皇97》加强版 风云再起 模拟器

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot