MFC实现全局热键

使用钩子技术实现QT中的全局热键 QT中的窗体只有获得焦点的情况下,才会响应按键或鼠标事件(MFC的窗体是否也是如此?)。但是在实际开发过程中,我们常常需要的是即使某些窗体处于失去焦点状态时,也能响应相应的键盘或者鼠标事件。那么,应该如何实现呢?     笔者在遇到这种情况时,首先考虑的还是使用事件监控的方式,但笔者在实际使用中发现,该种方式不是太适合。(主窗体需要监控所有的子窗体并且在监控QAxWidget时情况也很特殊,笔者 阅读详情

要想使用全局热键的话,需要用到两个函数:

BOOL WINAPI RegisterHotKey(
__in_opt HWND hWnd,
__in int id,
__in UINT fsModifiers,
__in UINT vk
);

afx_msg void OnHotKey(

    UINT nHotKeyId, 

    UINT nKey1, 

    UINT nKey2
);


1.首先在想使用热键的头文件中自定义一个消息ID

#define ONMYKEY 0x00001

2.在初始化函数中注册

BOOL CMainDlg::OnInitDialog()
{
...
RegisterHotKey(GetSafeHwnd(), F10, NULL, VK_F10);
...
}

3.为其想响应热键的界面添加响应热键消息函数

void CMainDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
MessageBox(_T("你按下了F10键"));
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}


MFC HotKey Control完全指南:属性设置、样式定制与实战应用 本文详细介绍了MFC中的HotKeyControl(热键控件)使用方法。主要内容包括:1) 热键控件的基础使用,包括资源添加、变量绑定和数据交换;2) 属性设置方法,通过SetRules函数配置热键组合规则;3) 自定义热键控件实现,包括派生自定义类、添加验证功能和字符串转换;4) 界面集成技巧,如动态创建和属性页应用;5) 实战应用示例,展示全局热键管理系统的实现;6) 最佳实践,包括热键冲突检测和持久化存储方案。文章通过丰富代码示例,帮助开发者掌握这一重要控件的各种应用场景。 阅读详情

相关推荐

VisionPro脚本实战:用C#替代QuickBuild,让复杂定位项目代码更清爽

本文探讨了如何通过C#脚本重构VisionPro复杂定位项目,替代臃肿的QuickBuild架构。通过实战案例展示了脚本化开发如何减少60%代码量并提升35%运行效率,使项目更易维护。文章详细介绍了环境搭建、多模板定位重构及高级技巧,帮助开发者突破QuickBuild限制,实现更高效的视觉应用开发。

weixin_30417487的博客 505

MFC-全局热键

MFC-全局热键   转载▼ 为基于对话框的应用程序增加全局热键其实没有多困难,只不过需要手工操作的东西相比来说稍微多一些而已。 1、在OnInitDialog中注册热键 使用函数RegisterHotKey()可以向系统注册全局热键,如下:        RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,'y');        Reg...

worldy的专栏 2301

usb设备的定位信息获取

一个usb hub有20个口,每个口有一个标号,那么如果一个为X的标号插入了一个android设备,如何通过函数,得到这个X,代码实现如下,获取了location, 得到类似 Port_#0002.Hub_#0003 的字符串,然后,要对应一个表。

babytiger的专栏 2106

MFC快捷键功能使用总结

MFC快捷键功能使用总结

天上的猩猩的专栏 3789

外设高级定时器互补输出带死区控制实验

外设高级定时器互补输出带死区控制实验

ff_juju的博客 1654

DEXPI与Proteus XML:解锁过程工业P&ID数据互操作性的技术核心

本文深入探讨了DEXPI与Proteus XML在过程工业P&ID数据互操作性中的核心技术。通过解析DEXPI标准的开源特性和Proteus XML的架构设计,揭示了其在跨平台数据交换中的关键作用,并结合CADMATIC和西门子COMOS的实战案例,展示了如何实现高效的数据集成与转换。

weixin_29195615的博客 385

使用MFC热键

使用热键 两种方法: (1) 直接重写WM_HOTKEY 头文件中: public:   afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2);   源文件中: BEGIN_MESSAGE_MAP(CMyhotKeyDlg, CDialogEx) ON_WM_HOTKE

怪凯的专栏 1591

保姆级教程:用CANoe的LIN Slave Conformance Tester搞定一致性测试(附LDF配置避坑点)

本文详细介绍了如何使用CANoe的LIN Slave Conformance Tester进行汽车电子LIN从节点一致性测试,包括测试环境搭建、LDF文件配置、多通道测试技巧及常见问题解决方案。通过实战案例和高级配置技巧,帮助工程师高效完成测试任务,确保LIN总线通信的可靠性。

weixin_30385925的博客 528

MFC 热键

MFC 热键flyfish新建一个MFC对话框在对话框中添加消息WM_HOTKEY最终代码如下//头文件afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2); int key_k;//开始 int key_t;//停止//实现文件 //消息映射 BEGIN_MESSAGE_MAP(CXDlg, CDialogEx) ON_

二分掌柜的 1132

二十一、CANdelaStudio深入-SPRMIB的配置

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的肯定响应抑制位配置,欢迎各位朋友订阅、评论,可以提出宝贵意见,以持续输出更好的作品,同时会根据评论、私信不定期更新文章内容,以及专栏目录。订阅该专栏的朋友可私信小编免费答疑解惑(^U^)ノ~YO CANdelaStudio-从入门到深入目录 文章目录CANdelaStu

诊断协议那些事儿's blog 1870

C++(Qt)软件调试---静态分析工具clang-tidy(18)

现在很多人在开发中完全忽略了编译器、IDE的警告提示,这怎么可能写出稳定的程序。 clang-tidy是一个由LLVM项目提供的开源工具,是一个静态分析工具,用于进行静态代码分析和代码质量改进。

mahuifa的博客 5083

MFC注册全局快捷键

注册全局快捷键 RegisterHotKey(m_hWnd,HotKeyId,MOD_ALT,VK_F2); 注意:A.第三个参数还可以是MOD_CONTROL|MOD_ALT,MOD_CONTROL来表示组合键 B.最后一个参数可以选择辅助键 VK_F1 -- VK_F10,或者是字母,但是字母只能是大写字母,小写字母不生效,经过测试的。 添加WM_HOTKEY消息,生成函数OnHot

重庆一小兵--关注教育、机器视觉、商务智能、数据分析 1349

【ubuntu24.04】auto remove后,重启,kernel panic ,please reboot your computer vfs unable to mount root fs

Ubuntu 24.04系统在运行auto remove后出现内核恐慌(kernel panic)无法启动,显示"VFS: unable to mount root fs"错误。该问题是由于当前内核被清除导致系统无法挂载根分区。解决步骤包括:1)尝试用GRUB菜单中的旧内核启动;2)在GRUB中临时编辑启动参数;3)使用Ubuntu启动盘进行chroot修复;4)使用Boot-Repair工具一键修复。成功启动后,需要重新安装linux-generic等元包,重建initramfs并更新

突围 1216

MFC设置热键关闭当前应用程序

热键设计为Ctrl+Alt+B,当程序启动后,无论当前是否处于程序界面,都可以关闭此程序。 1.在XXDlg.h中手动添加以下 protected: afx_msg LRESULT OnHotKey(WPARAM wParam, LPARAM lParam); 2.在XXDlg.cpp中手动添加 BEGIN_MESSAGE_MAP(CMFCHotKeyCloseExeDlg, CDi...

martinkeith的博客 1101

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

基于对话框的程序的全局按键设置的注意事项

最近在写一个后台小程序,需要在焦点在其他窗口的时候也能够响应,因此就想到了为这个小程序注册全局的按键。其实一开始想用全局钩子来实现的,但是微软官方的编程文档上指出全局钩子会严重消耗系统资源,而且全局钩子的设置还是稍微麻烦一些的,因此杀鸡焉用牛刀,单单实现一个全局热键就不用全局钩子了,如果想看全局钩子如何实现全局热键,可以参考微软官方的文档,地址在下面: https://docs.microsof...

qq_40292210的博客 265

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

火山PC全局热键

本源码转载自利快云https://www.lkuaiy.com/ 火山PC全局热键 一、需要调用的模块 视窗基本类 MFC界面基本类 volXH热键支持库 本文末附下载 二、代码结构 项目结构 代码截图 三、实现步骤 1.引用vloxH热键模块后,在主窗口下定义全局热键类型变量 2.在窗口创建完毕事件下,注册全局热键,使用 全局.注册()命令 3.注册命令简介 参数一 窗口句柄 使用 取窗口句柄() 获取MFC界面的句柄填入 参数二 热键ID...

qq1185907650的博客 2096

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++ 获取窗口句柄,给窗口设置全局热键

最近没事学习了下C++,用MFC做了一个小程序:点击应用程序窗口获取程序句柄,给应用程序设置全局热键,隐藏程序。 思路:   1. 截获鼠标点击事件。   2. 获取点击的窗口句柄。   3. 设置全局热键。   4. 响应热键的事件。 实现:   1. 截获鼠标点击事件。     使用SetCapture()将所有的鼠标消息据为己有。在捕获过程中,你却无法对其他的鼠标消息做出反应。Relea...

weixin_30568715的博客 653

MFC 注册系统热键

【代码】MFC 注册系统热键。

编程小白学编程 317

MFC 热键设置 OnHotKey方法和Accelerator方法的设置

http://blog.sina.com.cn/s/blog_65db04e601013zqv.html 写MFC程序时,如果想自定义热键比如ALT+S可以采用下面两种方法: 方法一:定义热键的消息响应函数:OnHotKey 定义系统全局热键: 1、首先在.h文件中添加消息响应函数声明  afx_msg LRESULT OnHotKey

tonykk2008的专栏 5724

VS2010 MFC中设置HotKey

           1.首先建立一个基于对话框的MFC程序,我这里建立的项目名为“Testlili”。   2.然后“项目”--“类向导”--“消息”,选择类名为“CTestliliDlg”,找到W...

wu694128的博客 925

钩子DLL注入

//1.新建mfc工程dll //2.给工程添加窗体资源IDD_DIALOG1 //3.给窗体添加基于Cdialog的一个类CZRDlg //4.给ZRDlg.h加上#include "resource.h"头文件,否则类中添加了资源编译会不通过 //5.在工程的def文件中导出StartHook CZRDlg *dlg=NULL; LRESULT CALLBACK HookPro(int n

Boss__Y的专栏 555

右键弹出菜单和快捷键的设置

写MFC,少不了用到菜单和快捷键,此处我用到了右键菜单。我的项目是一个播放器的实现,那么在屏幕中央右键点击,应该会弹出右键菜单,比如播放,暂停等,如我这样: 对应的每一个菜单应该还有相应的快捷键。那么具体如何设置呢?此处我省略在资源中添加菜单的步骤了,我的菜单ID为IDR_MENU1。想要实现右键点击播放器区域弹出菜单,需要响应右键按下的消息WM_RBUTTONDOWN,添加事件处理函数如下:vo

人至贱则无敌 1万+

VC++高仿QQ2012界面:从零实现Windows桌面GUI开发核心技巧

Windows GUI编程是桌面应用开发的基石,其核心在于理解窗口、消息循环与资源管理机制。通过Win32 API和MFC框架,开发者可以深入掌握窗口句柄、设备上下文等底层原理,从而实现对界面元素的精细控制。这种技术能力对于构建高性能、高定制化的客户端软件具有重要价值,广泛应用于即时通讯、工具软件等场景。本文以经典的QQ2012界面为蓝本,详细解析如何使用VC++进行高仿开发,其中涉及非客户区自定义绘制和自绘控件等关键技术,通过复现登录窗口、好友列表等模块,帮助读者打通桌面应用界面开发的核心知识点。

weixin_34279184的博客 378

Qt全局热键(windows篇)

Qt全局热键、winEventFilter、RegisterHotKey

calm_agan的专栏 3880
上一篇: MFC实现 打开文件、保存文件
下一篇: MFC更改其他程序的界面大小、位置
Big Joker
博客等级 码龄14年 92粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值