//------------------------------------------头文件------------------------------------------
#ifndef __CAPTURINGKEYS__
#define __CAPTURINGKEYS__
#include <w32std.h>
#include <apgwgnam.h> //CApaWindowGroupName
class MKeyCallBack
{
public:
virtual TBool KeyCapturedL(TWsEvent aEvent) = 0;
};
class CHandleItem
{
public:
CHandleItem();
~CHandleItem();
TInt iHandle;
};
class CKeyCapturer : public CActive
{
public:
static CKeyCapturer* NewL(MKeyCallBack& aObserver);
static CKeyCapturer* NewLC(MKeyCallBack& aObserver);
virtual ~CKeyCapturer();
private:
CKeyCapturer(MKeyCallBack& aObserver);
void ConstructL();
void RunL();
void DoCancel();
void Listen();
private:
MKeyCallBack& iObserver;
RWsSession iWsSession;
RWindowGroup iWg;
RPointerArray<CHandleItem> iHandleArray;
};
#endif
//------------------------------------------定义文件------------------------------------------
#include "manager/CapturingKeys.h"
CHandleItem::CHandleItem()
{
}
CHandleItem::~CHandleItem()
{
}
CKeyCapturer* CKeyCapturer::NewL(MKeyCallBack& aObserver)
{
CKeyCapturer* self = CKeyCapturer::NewLC(aObserver);
CleanupStack::Pop(self);
return self;
}
CKeyCapturer* CKeyCapturer::NewLC(MKeyCallBack& aObserver)
{
CKeyCapturer* self = new (ELeave) CKeyCapturer(aObserver);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CKeyCapturer::CKeyCapturer(MKeyCallBack& aObserver) :
CActive(EPriorityStandard/*EPriorityHigh*/), iObserver(aObserver)
{
}
CKeyCapturer::~CKeyCapturer()
{
//注销
TInt nCount = iHandleArray.Count();
for (TInt i = 0; i < nCount; i++)
{
if (iHandleArray[i]->iHandle > -1)
{
iWg.CancelCaptureKey(iHandleArray[i]->iHandle);
}
iHandleArray[i]->iHandle = -1;
}
//
iHandleArray.ResetAndDestroy();
Cancel();
iWg.Close();
iWsSession.Close();
}
void CKeyCapturer::ConstructL()
{
CActiveScheduler::Add(this);
User::LeaveIfError(iWsSession.Connect());
iWg = RWindowGroup(iWsSession);
User::LeaveIfError(iWg.Construct((TUint32) &iWg, EFalse));
iWg.SetOrdinalPosition(-1);
iWg.EnableReceiptOfFocus(EFalse);
CApaWindowGroupName* wn = CApaWindowGroupName::NewLC(iWsSession);
wn->SetHidden(ETrue);
wn->SetWindowGroupName(iWg);
CleanupStack::PopAndDestroy();
TInt nStart = 0;
TInt nEnd = 0;
//0~9
nStart = 48;
nEnd = 57;
for (TInt i = nStart; i <= nEnd; i++)
{
CHandleItem * pItem = new (ELeave) CHandleItem;
pItem->iHandle = iWg.CaptureKey(i, 0, 0);
//iWg.CaptureLongKey(i, i, 0, 0, 1000000000, ELongCaptureNormal); // to start capturing
iHandleArray.Append(pItem);
}
//注册* #
CHandleItem * pItem133 = new (ELeave) CHandleItem;
pItem133->iHandle = iWg.CaptureKey(42, 0, 0); //可以捕获*
//pItem133->iHandle = iWg.CaptureKey('*', 0, 0);
iHandleArray.Append(pItem133);
CHandleItem * pItem127 = new (ELeave) CHandleItem;
//pItem127->iHandle = iWg.CaptureKey(127, 0, 0);
pItem127->iHandle = iWg.CaptureKey('#', 0, 0);
iHandleArray.Append(pItem127);
//*、#键比较郁闷,
//在手机上,*必须注册42
//在模拟器上,*必须注册133
Listen();
}
void CKeyCapturer::RunL()
{
if (iStatus == KErrNone)
{
TWsEvent e;
iWsSession.GetEvent(e);
if (iObserver.KeyCapturedL(e))
{
TInt wgId = iWsSession.GetFocusWindowGroup();
iWsSession.SendEventToWindowGroup(wgId, e);
}
}
if (iStatus != KErrCancel)
{
Listen();
}
}
void CKeyCapturer::DoCancel()
{
iWsSession.EventReadyCancel();
}
void CKeyCapturer::Listen()
{
iWsSession.EventReady(&iStatus);
SetActive();
}
//------------------------------------------调用规则------------------------------------------
1.在.h文件中定义CKeyCapturer变量。并继承MKeyCallBack类。在类中实例化KeyCapturedL函数。
2.在.cpp文件的ConstructL中
//创建监听类
iKeyCapturer = CKeyCapturer::NewL(*this);
3.在.cpp文件中定义
TBool CSmartDialAppUi::KeyCapturedL(TWsEvent aEvent)
{
TInt nKey = aEvent.Key()->iScanCode;
//查看程序是否可以用
if (iControl->GetStateApp())
{
if ((42 == nKey) || (127 == nKey) || (48 <= nKey && 57 >= nKey))
{
//这就是监听到的键值
}
}
return ETrue;
}
相关推荐
OpenClaw桌面版v0.3.0:本地化智能体工作流中枢详解
智能体(Agent)是AI工程化落地的核心范式,其本质是将大模型能力封装为可编排、可调试、可审计的确定性组件。OpenClaw作为开源智能体框架,摒弃浏览器依赖与网络中转,通过本地IPC通信、技能沙箱隔离与声明式配置体系,实现毫秒级响应与端到端可控。它不提供模型,而是构建面向文件、剪贴板、终端、数据库等本地资源的运行时基础设施,支撑PDF摘要、飞书接入、金融分析等真实工作流场景。v0.3.0标志着从‘能跑’迈向‘稳用、可管、可扩’的工程成熟期,为个人开发者与小团队提供类操作系统级别的本地AI工作流中枢。
qt之在任意情况获取全局键盘按下事件
一、前言 一般来说,在使用键盘事件的时候,如果qt界面隐藏最小化或者不在顶层不是聚焦状态了,在按键盘就没有反应了,但是有的时候想在任何情况都要能通过键盘控制程序,所以本文的宗旨就是分享如何全局接收键盘事件。 二、环境 qt5.7 win8 三、正文 话不多说,先上程序,在pro目录下添加一个keypad文件夹,这个位置具体要放在哪里,还是根据个人习惯来定,反正这里加的代码后期也不需要整...
docker consul部署
一、定义1、Consul 使用场景2、Consul 优势3、Consul的四大核心特性:4、构建核心二、容器服务更新与发现拓扑图三、部署1、consul服务器操作2、容器服务自动注册到consul集群2.1、安装 Gliderlabs/Registrator Gliderlabs/Registrator2.2、测试服务发现功能是否正常 一、定义 Consul 是一个支持多数据中心分布式高可用的 服务发现 和 配置共享 的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Pu.
Python键盘监听-捕获输入的键值-鼠标监听
使用pyHook可以实现检测键盘的每个按键,并区分左右Ctrl、shift、win等,以及区分主键盘数字和小键盘数字等。 本来很简单的东西,网上很多文章一堆东西甩在哪,很难看懂,让人感觉有多难。其实就这么简单的几行就可以获取到键盘按键是按得哪一个。 一、安装API 1.pyHook安装 pyHook库的话需要自己来下载。 选择适合的本机环境的版本进行下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook 2、pywin32安装 ...
Docker-Consul概述以及集群环境搭建(图文详解)
文章目录一、Docker consul概述Consul的特性二、基于 nginx 与 consul 构建自动发现即高可用的 Docker 服务架构1.项目需求2.环境准备3.部署步骤①在主节点上部署consul②nginx 服务器连接 consul 并创建 nginx 容器服务③consul 群集添加 consul-template 以实现容器自动加入④新增一个 nginx 容器节点以测试自动更新⑤测试访问代理服务器⑥consul 多节点配置 一、Docker consul概述 容器服务更新与发现:先发现再
CPLEX 20.1.0 Windows环境对齐手册:许可证、DLL路径与VS集成三重校准
CPLEX作为工业级数学规划求解器,其Windows部署并非标准软件安装,而涉及许可证服务、动态链接库(DLL)加载路径和IDE构建链路的深度协同。核心原理在于:CPLEX依赖外部许可证服务器(cplexamp.exe)提供运行时授权,所有C++调用均通过ibm_cplex.dll等原生库桥接,而Visual Studio等IDE必须精准识别头文件、静态库及运行时DLL的物理位置与版本兼容性。技术价值体现在规避LNK2019链接错误、0xc000007b架构冲突及Unknown状态求解失败等高频工程故障。典
KVO-键值监听
键值监听,就是可以监听对象某个属性值的变化; 首先,在工程中,新建一个Person的类 @interface Person : NSObject @property (nonatomic, copy) NSString *name; @end 在viewController中引入头文件“Person”,开始测试KVO的使用 - (void)viewDidL...
Qt后台监听键盘按键事件
该实例程序使用Qt进行,windows的键盘后台监听,即使Qt桌面程序失去焦点在后台运行,也会捕捉到按键事件 这个程序使用windows的钩子(hook)实现的,Qt官方没有相关的实现 关于编译,我用的是Qt5.9.7 MinGW32位,我还用了Qt 5.6.3MinGW32位,也变过去了, 更换编译环境时候可能会报错,这些问题请百度 我遇到过声明的函数提示已经声明了,我就声明了一次,没办发, 把声明去了,就去可以正常便过去了 还有使用windows系统库的时候可能会链接不上,在*.pro文件里面添加windows系统库就好了 列如: LIBS += -Lc:/xx/xx -lUser32 不要想着别人的代码拿过来就能跑起来,先解决编译问题,这也是在不断地积累
【限时解禁】VMware Workstation Pro 17.5 NAT服务崩溃日志解码手册(含3个未公开error code含义及官方未披露的registry修复键值)
快速定位并修复VMware NAT模式下NAT服务崩溃问题,涵盖17.5版本日志解码、3个未公开error code释义及官方未披露的Registry修复键值。适用于频繁断网、DHCP失效等典型场景,操作安全高效,值得收藏。
GPS从入门到放弃(一) --- GPS基础原理
GPS从入门到放弃(一) — GPS基础原理 GPS,全称Global Positioning System,已经广泛应用于我们的日常生活中了,现在的智能手机 里都会自带GPS定位功能。这是一个美国的全球定位系统,虽然我们现在也有北斗了,但毕竟GPS搞的早,所以先从它开始研究起。 整个GPS系统分三大部分: 地面站 卫星 接收机 地面站负责监控。它们通过接收、测量各个卫星信号,计算卫星的运行轨...
钣金设计高薪进阶:从材料工艺到DFMA降本增效全解析
钣金设计是机械制造领域的核心技术之一,它涉及将金属板材通过切割、折弯、焊接等工艺成型为所需零件。其核心原理在于深刻理解材料特性、制造工艺约束与结构力学,以确保设计在功能、成本与可制造性之间取得最佳平衡。这项技术的价值在于,优秀的钣金设计能直接驱动产品降本增效,通过优化材料利用率、简化装配工序和避免设计缺陷,为企业节省大量模具与生产成本。其应用场景广泛,从机箱机柜、汽车部件到电子设备外壳无处不在。本文将聚焦于实现这一价值的关键路径,深入探讨面向制造与装配的设计(DFMA)原则在钣金领域的实战应用,并剖析如何通
【Docker#9】容器实战演练
📃个人主页:island1314。
ffmpeg 4.4 cenc-aes-ctr 加解密 MP4 工程性质分析
ffmpeg 4.4 cenc-aes-ctr 加解密 MP4 工程性质分析
Ubuntu 16.04 下 PostgreSQL 9.5 安装与生产级配置指南
PostgreSQL 是遵循 ACID 和 MVCC 的开源关系型数据库,其多版本并发控制与逻辑复制能力支撑高可靠性数据服务。在老旧系统如 Ubuntu 16.04 上部署时,需深入理解 apt 包分层机制、systemd 模板服务(如 postgresql@9.5-main)、postgres 系统用户权限模型及 pg_hba.conf 认证策略。这些底层设计决定了数据库能否安全启动、远程访问与权限隔离。典型应用场景包括工控设备数据采集、高校物联网实验环境、DevOps 基础设施运维及数据库原理教学调试。
多路输出电源的交叉调整率:从理论到无源优化实践
本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。
【路由交换】思科5506防火墙三区域互通
思科 5506 inside outside dmz 互通
Qwen3.5-9B实战指南:小模型的高性能部署与混合推理应用
大语言模型并非越大越好,9B级模型正成为消费级硬件与工程落地之间的关键枢纽。基于Qwen3.5架构演进,其256K超长上下文、Thinking/Non-thinking混合推理模式与Q4_K_XL动态量化技术,共同支撑起技术文档精读、中等复杂度代码生成、结构化数据提取等真实工作流。这类轻量高性能模型在16GB内存+RTX 4060等主流配置上即可稳定运行,兼顾响应速度、结果质量与部署成本。本文聚焦Qwen3.5-9B的本地化部署、参数调优、避坑实践与可持续工作流构建,为开发者提供开箱即用的工程化落地方案。
【即插即用模块】Mamba篇 | CVPR 2025 | MaIR:新型Mamba扫描方式+通道混洗注意力,全任务涨点!
MaIR是一种新型图像恢复模型,通过嵌套S形扫描策略(NSS)和序列混洗注意力(SSA)改进传统Mamba方法。NSS采用条纹区域划分和S形扫描路径,既保留图像局部性又维持空间连续性;SSA通过通道洗牌和门控机制增强特征聚合。该模块创新性地融合多路径选择性扫描、深度卷积和注意力机制,在保持O(N)计算复杂度的同时,显著提升超分辨率和去噪等任务的性能表现(PSNR提升0.2-0.5dB)。代码实现包含特征洗牌、组卷积等关键操作,适用于高分辨率视觉任务,可作为即插即用组件替代传统自注意力模块。
Docker consul容器服务更新与发现
目录一、Consul概述Consul简介Consul的特性Consul使用场合Consul优势consul端口二、Docker Consul服务搭建1.Consul服务器部署2.安装 consul-template工具 一、Consul概述 Consul简介 Consul是HashiCorp公司用 Go 语言开发推出的开源工具,用于实现分布式系统的服务发现与配置 Consul的特性 支持健康检查,允许存储键值对 基于Golong语言,可移植性强 支持ACL访问控制 与Docker等轻量级容器可无缝配合
Ardupilot EKF3核心算法《开篇》
Ardupilot EKF3核心算法本专栏重点,透彻,详细的分析了ardupilot的EKF3,保证是你看到的最完美的EKF3资料,相信你的选择不会错误。网上EKF资料真是太多,说真的没有一篇讲解好的。!!
YOLOv11改进缝合注意力 | 深度优化的BiFormer模型-结合BiLevel Routing Attention与深度可分离卷积的创新应用(附代码)
YOLO(You Only Look Once)系列目标检测算法一直以来都是计算机视觉领域的热门选择。随着YOLOv11的发布,它在许多实际应用场景中取得了显著的性能提升。然而,面对日益复杂的目标检测任务,单纯依赖卷积神经网络(CNN)在某些情况下已经显得力不从心,特别是在处理小尺度、密集目标以及遮挡目标时,卷积操作的局部性限制了模型的表达能力。
对Mydoom.a的shimgapi.dll的分析
Mydoom.a的后门是以dll形式存在的,通过修改注册表相应键值,将自己加载到资源管理器的进程空间中。正常情况下,注册表应该是这个样子的:HKEY_CLASSES_ROOT\CLSID\{E6FB5E20-DE35-11CF-9C87-00AA005127ED}\InProcServer32<NO NAME> REG_EXPAND_SZ %SystemRoot%\System32\w...
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
Docker consul 容器服务更新与发现
文章目录Docker consul概述常见的基于nginx和consul构建高可用及自动发现的Docker服务架构来吧!展示!!Docker consul自动发现服务架构的构建主节点部署consulniginx节点设置测试发现服务Compose-template概述来吧!展示!!consul集群添加compose-template,实现容器自动加入Nginx集群主节点安装 consul-terplate编写主配置模板文件主节点编译安装nginx启动template,指定template模板文件及生成路径主节
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
JB3-9-SpringAI(一)
基础对话,通义千问,SpringAI,SpringAIAlibaba,AI对话,文生图,文生音频,文生视频,AI记忆,RAG,ETL,向量库,ToolCalling,MCP,Graph 等。
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
彻底卸载Oracle数据库:从原理到实践的完整指南
数据库管理系统(DBMS)的安装与卸载是系统运维中的基础操作,其底层原理涉及操作系统服务管理、注册表操作和文件系统交互。以Oracle数据库为例,其复杂的安装机制会在系统中注册服务、写入环境变量并创建大量依赖文件,这使得简单的程序卸载无法彻底清理。从技术价值看,掌握深度卸载能力不仅能释放磁盘空间,更是保障系统稳定性、避免版本冲突和后续安装失败的关键技能。在实际应用场景中,无论是Windows服务器还是Linux环境,运维人员常需在数据迁移(如迁移到MySQL)、环境重建或软件升级前执行此操作。本文聚焦于Or
docker + consul + nginx集成分布式架构
一、Docker Consul容器服务更新与发现理论 Consul是一个分布式、高可用的系统,是一个为了解决在生产环境中服务注册,服务发现,服务配置的一个工具,它有多个组件,提供如下几个关键功能: 服务发现: Consul的某些客户端可以提供一个服务,例如api或者mysql,其它客户端可以使用Consul去发现这个服务的提供者。使用DNS或者HTTP,应用可以很容易的找到他们所依赖的服务。 健康检查: Consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务(服务是否返回200 OK)
546



被折叠的 条评论
为什么被折叠?



