- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何实时监控键盘的按键
在一个控制程序中,如何能够实时监控键盘的热键?如设备正在运行,按下键盘的”ESC”来停止程序的运行?
使用消息传递和对键盘消息监视检查即可实现。下面实例就是通过线程程序运行中监视”ESC”按键和”SPACE”按键
AppMessage1(tagMSG Msg, bool Handled)
{
if (Msg.message == WM_KEYDOWN)
{
if(Msg.wParam ==VK_SPACE)
{
dw = WaitForSingleObject(g_hMutex, INFINITE);
//等待互斥量信号
if(dw == WAIT_OBJECT_0)
{
KVar.b1=true;
}
ReleaseMutex(g_hMutex);
}
if(Msg.wParam ==VK_ESCAPE)
{
dw = WaitForSingleObject(g_hMutex, INFINITE);
//等待互斥量信号
if(dw ==WAIT_OBJECT_0)
KVar.b2=true;
ReleaseMutex(g_hMutex);
}
}
}
在事例程序中,使用线程监控按键,并置变量
struct KuseVar {
bool b1; //记录ESC按键按下
bool b2; //记录SPACE按键按下
};
extern KuseVar KVar;
示例中,”ESC”按键按下时,AppMessage1函数通过Msg.message 检查到是否有按键按下,如果有则通过Msg.wParam 检查是否有”ESC”按键按下,如有则置struct KuseVar中的b1为true;如有”SPACE”按键按下,则置struct KuseVar中的b2为true。
Timer1和timer2分别检查 struct KuseVar中的b1、b2来显示按键按下或是恢复。图1为源程序设计时的窗体布置,图2为程序运行时的界面。此时按下”ESC”或”SPACE”按键,Label1和Label2显示按键状态。
按下”打开新窗口”后弹出一个新窗口,此时按下”ESC”或”SPACE”按键,Label1和Label2仍可显示按键的状态。
图 1
图 2
最重要的一步:Application-OnMessage=b-AppMessage1;
把改代码放在如下执行
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Application-OnMessage=b-AppMessage1;
KVar.b1=false;
KVar.b2=false;
g_hMutex = CreateMutex(NULL, FALSE, NULL);
}
以下为C++ Builder的源代码
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include Classes.hpp
#include Controls.hpp
#include StdCtrls.hpp
#include Forms.hpp
#include ExtCtrls.hpp
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TImage *Image1;
TCheckBox *CheckBox1;
TCheckBox *CheckBox2;
TButton *Button1;
TButton *Button2;
TLabel *La
您可能关注的文档
- 第5节 存储器管理2_chd.ppt
- 第5节 结构化查询语言SQL.ppt
- c++程序设计 杨俊清第1讲 最简单的C++程序.ppt
- C++程序设计.周强.国防科技大学.第1节.ppt
- 第5节 结构化分析.ppt
- C++程序设计第6讲 数据抽象-类.ppt
- 第5节 数据的添加、更新.ppt
- 第5节 系统管理.ppt
- 第5节 显示图书.ppt
- 第5节 宣传单的制作.ppt
- 四川省德阳市罗江中学2025届高三考前热身化学试卷含解析.doc
- 山东省枣庄现代实验学校2025届高三下学期第五次调研考试化学试题含解析.doc
- 吉林省长春市十一高中等九校教育联盟2025届高三一诊考试生物试卷含解析.doc
- 2025届江苏省盐城市伍佑中学高考仿真模拟化学试卷含解析.doc
- 2025届广西贺州中学高考冲刺押题(最后一卷)生物试卷含解析.doc
- 安徽省池州市贵池区2025届高三第一次模拟考试生物试卷含解析.doc
- 宁夏银川一中2025届高三(最后冲刺)化学试卷含解析.doc
- 广东省广州市增城区四校联考2025届高考压轴卷化学试卷含解析.doc
- 2025届邯郸市第一中学高考生物必刷试卷含解析.doc
- 2025届安徽省安庆市石化第一中学高考仿真卷化学试卷含解析.doc
文档评论(0)