注册监听键值 0~9、*、#键

基于键值对模型构建个人数字资产管理框架kvstudio 键值对(Key-Value)是一种基础且灵活的数据模型,它将数据存储为键值对集合,允许值具有任意结构。其核心原理在于通过唯一的键来快速访问对应的值,这种无模式(Schema-less)的特性使其能够轻松适应多变的数据形态。在技术价值上,KV模型提供了极高的灵活性和可控性,非常适合作为构建个性化工具的底层存储方案。在应用场景中,它常被用于需要快速读写和灵活数据结构的场景,例如配置管理、缓存系统和用户偏好设置。本文聚焦于如何利用这一模型,结合SQLite、TypeScript等技术栈,实现一个名为kvstudi 阅读详情



//------------------------------------------头文件------------------------------------------

#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;
    }

qt 全局按键监听 #ifndef KEYCAPTURER_H #define KEYCAPTURER_H #include <QObject> class KeyCapturer : public QObject { Q_OBJECT public: virtual ~KeyCapturer(); static KeyCapturer *&instance() { static KeyCapturer *s = nullptr; . 阅读详情

相关推荐

OpenClaw桌面版v0.3.0:本地化智能体工作流中枢详解

智能体(Agent)是AI工程化落地的核心范式,其本质是将大模型能力封装为可编排、可调试、可审计的确定性组件。OpenClaw作为开源智能体框架,摒弃浏览器依赖与网络中转,通过本地IPC通信、技能沙箱隔离与声明式配置体系,实现毫秒级响应与端到端可控。它不提供模型,而是构建面向文件、剪贴板、终端、数据库等本地资源的运行时基础设施,支撑PDF摘要、飞书接入、金融分析等真实工作流场景。v0.3.0标志着从‘能跑’迈向‘稳用、可管、可扩’的工程成熟期,为个人开发者与小团队提供类操作系统级别的本地AI工作流中枢。

weixin_33937913的博客 546

qt之在任意情况获取全局键盘按下事件

一、前言 一般来说,在使用键盘事件的时候,如果qt界面隐藏最小化或者不在顶层不是聚焦状态了,在按键盘就没有反应了,但是有的时候想在任何情况都要能通过键盘控制程序,所以本文的宗旨就是分享如何全局接收键盘事件。 二、环境 qt5.7 win8 三、正文 话不多说,先上程序,在pro目录下添加一个keypad文件夹,这个位置具体要放在哪里,还是根据个人习惯来定,反正这里加的代码后期也不需要整...

kbq的博客 5030

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.

yan_0916的博客 2681

Python键盘监听-捕获输入的键值-鼠标监听

使用pyHook可以实现检测键盘的每个按键,并区分左右Ctrl、shift、win等,以及区分主键盘数字和小键盘数字等。 本来很简单的东西,网上很多文章一堆东西甩在哪,很难看懂,让人感觉有多难。其实就这么简单的几行就可以获取到键盘按键是按得哪一个。 一、安装API 1.pyHook安装 pyHook库的话需要自己来下载。 选择适合的本机环境的版本进行下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook 2、pywin32安装 ...

学习随笔 1万+

Docker-Consul概述以及集群环境搭建(图文详解)

文章目录一、Docker consul概述Consul的特性二、基于 nginx 与 consul 构建自动发现即高可用的 Docker 服务架构1.项目需求2.环境准备3.部署步骤①在主节点上部署consul②nginx 服务器连接 consul 并创建 nginx 容器服务③consul 群集添加 consul-template 以实现容器自动加入④新增一个 nginx 容器节点以测试自动更新⑤测试访问代理服务器⑥consul 多节点配置 一、Docker consul概述 容器服务更新与发现:先发现再

weixin_53560205的博客 2864

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状态求解失败等高频工程故障。典

weixin_33831196的博客 398

KVO-键值监听

键值监听,就是可以监听对象某个属性值的变化; 首先,在工程中,新建一个Person的类 @interface Person : NSObject @property (nonatomic, copy) NSString *name; @end 在viewController中引入头文件“Person”,开始测试KVO的使用 - (void)viewDidL...

weixin_30257433的博客 197

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失效等典型场景,操作安全高效,值得收藏。

PixelIsle的博客 254

GPS从入门到放弃(一) --- GPS基础原理

GPS从入门到放弃(一) — GPS基础原理 GPS,全称Global Positioning System,已经广泛应用于我们的日常生活中了,现在的智能手机 里都会自带GPS定位功能。这是一个美国的全球定位系统,虽然我们现在也有北斗了,但毕竟GPS搞的早,所以先从它开始研究起。 整个GPS系统分三大部分: 地面站 卫星 接收机 地面站负责监控。它们通过接收、测量各个卫星信号,计算卫星的运行轨...

tyst08的专栏 2万+

钣金设计高薪进阶:从材料工艺到DFMA降本增效全解析

钣金设计是机械制造领域的核心技术之一,它涉及将金属板材通过切割、折弯、焊接等工艺成型为所需零件。其核心原理在于深刻理解材料特性、制造工艺约束与结构力学,以确保设计在功能、成本与可制造性之间取得最佳平衡。这项技术的价值在于,优秀的钣金设计能直接驱动产品降本增效,通过优化材料利用率、简化装配工序和避免设计缺陷,为企业节省大量模具与生产成本。其应用场景广泛,从机箱机柜、汽车部件到电子设备外壳无处不在。本文将聚焦于实现这一价值的关键路径,深入探讨面向制造与装配的设计(DFMA)原则在钣金领域的实战应用,并剖析如何通

weixin_34301132的博客 391

【Docker#9】容器实战演练

📃个人主页:island1314。

island1314的博客 870

ffmpeg 4.4 cenc-aes-ctr 加解密 MP4 工程性质分析

ffmpeg 4.4 cenc-aes-ctr 加解密 MP4 工程性质分析

Dream_Dynasty的博客 3045

Ubuntu 16.04 下 PostgreSQL 9.5 安装与生产级配置指南

PostgreSQL 是遵循 ACID 和 MVCC 的开源关系型数据库,其多版本并发控制与逻辑复制能力支撑高可靠性数据服务。在老旧系统如 Ubuntu 16.04 上部署时,需深入理解 apt 包分层机制、systemd 模板服务(如 postgresql@9.5-main)、postgres 系统用户权限模型及 pg_hba.conf 认证策略。这些底层设计决定了数据库能否安全启动、远程访问与权限隔离。典型应用场景包括工控设备数据采集、高校物联网实验环境、DevOps 基础设施运维及数据库原理教学调试。

weixin_34087307的博客 392

多路输出电源的交叉调整率:从理论到无源优化实践

本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。

weixin_26886855的博客 280

【路由交换】思科5506防火墙三区域互通

思科 5506 inside outside dmz 互通

baidu_22774701的博客 6205

Qwen3.5-9B实战指南:小模型的高性能部署与混合推理应用

大语言模型并非越大越好,9B级模型正成为消费级硬件与工程落地之间的关键枢纽。基于Qwen3.5架构演进,其256K超长上下文、Thinking/Non-thinking混合推理模式与Q4_K_XL动态量化技术,共同支撑起技术文档精读、中等复杂度代码生成、结构化数据提取等真实工作流。这类轻量高性能模型在16GB内存+RTX 4060等主流配置上即可稳定运行,兼顾响应速度、结果质量与部署成本。本文聚焦Qwen3.5-9B的本地化部署、参数调优、避坑实践与可持续工作流构建,为开发者提供开箱即用的工程化落地方案。

weixin_33725515的博客 428

【即插即用模块】Mamba篇 | CVPR 2025 | MaIR:新型Mamba扫描方式+通道混洗注意力,全任务涨点!

MaIR是一种新型图像恢复模型,通过嵌套S形扫描策略(NSS)和序列混洗注意力(SSA)改进传统Mamba方法。NSS采用条纹区域划分和S形扫描路径,既保留图像局部性又维持空间连续性;SSA通过通道洗牌和门控机制增强特征聚合。该模块创新性地融合多路径选择性扫描、深度卷积和注意力机制,在保持O(N)计算复杂度的同时,显著提升超分辨率和去噪等任务的性能表现(PSNR提升0.2-0.5dB)。代码实现包含特征洗牌、组卷积等关键操作,适用于高分辨率视觉任务,可作为即插即用组件替代传统自注意力模块。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1162

Docker consul容器服务更新与发现

目录一、Consul概述Consul简介Consul的特性Consul使用场合Consul优势consul端口二、Docker Consul服务搭建1.Consul服务器部署2.安装 consul-template工具 一、Consul概述 Consul简介 Consul是HashiCorp公司用 Go 语言开发推出的开源工具,用于实现分布式系统的服务发现与配置 Consul的特性 支持健康检查,允许存储键值对 基于Golong语言,可移植性强 支持ACL访问控制 与Docker等轻量级容器可无缝配合

weixin_49780168的博客 481

Ardupilot EKF3核心算法《开篇》

Ardupilot EKF3核心算法本专栏重点,透彻,详细的分析了ardupilot的EKF3,保证是你看到的最完美的EKF3资料,相信你的选择不会错误。网上EKF资料真是太多,说真的没有一篇讲解好的。!!

陌城烟雨 1413

YOLOv11改进缝合注意力 | 深度优化的BiFormer模型-结合BiLevel Routing Attention与深度可分离卷积的创新应用(附代码)

YOLO(You Only Look Once)系列目标检测算法一直以来都是计算机视觉领域的热门选择。随着YOLOv11的发布,它在许多实际应用场景中取得了显著的性能提升。然而,面对日益复杂的目标检测任务,单纯依赖卷积神经网络(CNN)在某些情况下已经显得力不从心,特别是在处理小尺度、密集目标以及遮挡目标时,卷积操作的局部性限制了模型的表达能力。

一键难忘的博客 716

对Mydoom.a的shimgapi.dll的分析

Mydoom.a的后门是以dll形式存在的,通过修改注册表相应键值,将自己加载到资源管理器的进程空间中。正常情况下,注册表应该是这个样子的:HKEY_CLASSES_ROOT\CLSID\{E6FB5E20-DE35-11CF-9C87-00AA005127ED}\InProcServer32&lt;NO NAME&gt; REG_EXPAND_SZ %SystemRoot%\System32\w...

爱.NET 188

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Docker consul 容器服务更新与发现

文章目录Docker consul概述常见的基于nginx和consul构建高可用及自动发现的Docker服务架构来吧!展示!!Docker consul自动发现服务架构的构建主节点部署consulniginx节点设置测试发现服务Compose-template概述来吧!展示!!consul集群添加compose-template,实现容器自动加入Nginx集群主节点安装 consul-terplate编写主配置模板文件主节点编译安装nginx启动template,指定template模板文件及生成路径主节

Ora_G的博客 1597

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 等。

周航宇的博客 3924

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

彻底卸载Oracle数据库:从原理到实践的完整指南

数据库管理系统(DBMS)的安装与卸载是系统运维中的基础操作,其底层原理涉及操作系统服务管理、注册表操作和文件系统交互。以Oracle数据库为例,其复杂的安装机制会在系统中注册服务、写入环境变量并创建大量依赖文件,这使得简单的程序卸载无法彻底清理。从技术价值看,掌握深度卸载能力不仅能释放磁盘空间,更是保障系统稳定性、避免版本冲突和后续安装失败的关键技能。在实际应用场景中,无论是Windows服务器还是Linux环境,运维人员常需在数据迁移(如迁移到MySQL)、环境重建或软件升级前执行此操作。本文聚焦于Or

weixin_30328063的博客 294

docker + consul + nginx集成分布式架构

一、Docker Consul容器服务更新与发现理论 Consul是一个分布式、高可用的系统,是一个为了解决在生产环境中服务注册,服务发现,服务配置的一个工具,它有多个组件,提供如下几个关键功能: 服务发现: Consul的某些客户端可以提供一个服务,例如api或者mysql,其它客户端可以使用Consul去发现这个服务的提供者。使用DNS或者HTTP,应用可以很容易的找到他们所依赖的服务。 健康检查: Consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务(服务是否返回200 OK)

Shadow__Flow的博客 1052
上一篇: 关闭、显示、隐藏某一个窗口
下一篇: Symbian 中各种提示、输入对话框的使用
think12
博客等级 码龄17年 132粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值