# TabTipNotification **Repository Path**: lzlong88/tabtipnotification ## Basic Information - **Project Name**: TabTipNotification - **Description**: 一个类似于TabTip用于检测windows当前是否处于输入状态的程序,代码都是自己写的,方案来源于对TabTip.exe的逆向。 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-04 - **Last Updated**: 2025-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TabTipNotification #### 介绍 一个类似于TabTip用于检测windows当前是否处于输入状态的程序,代码都是自己写的,方案来源于对TabTip.exe的逆向,逆向过程非常曲折; 相关具体逆向笔记记录于本人的csdn:https://blog.csdn.net/liaozhilong88/article/details/130647946 #### 软件架构 软件架构说明 1.该软件核心主程序是tabtipnotification,tabtipnotification是windows输入状态检测的核心模块。辅助界面显示程序为TabTipWindow,只是用来测试和观察的一个简单界面显示程序。 2.本项目代码工程是用vs2022生成的,就不用cmake构建工程了。本工程主要用于代码展示。 #### 效果展示 ![预览截图](https://gitee.com/lzlong88/tabtipnotification/raw/master/record.gif) #### 使用说明 1. 运行主程序TabTipNotification.exe,这个是windows输入状态检测的核心程序;这个程序会拉起TabTipWindow.exe,这个程序是用于接收主程序输入状态消息的辅助程序,该程序模仿手机输入状态,并在有输入状态的时候主界面显示输入状态框会自动弹起,在非输入状态的时候,输入状态框会自动收起。 2. xxxx 3. xxxx #### 参与贡献 1. 该代码是本人在工作中编写的,代码仅供学习和个人代码展示,不能用于商业目的。 #### 部分说明 1.系统输入状态检测是通过ntdll的未公布的API:RtlSubscribeWnfStateChangeNotification注册一个ID为WNF_TKBN_IMMERSIVE_FOCUS_TRACKING({ 0xA3BC1835, 0x0F840539 })的回调函数,然后通过解析tipskins.dll模块的_OnImmersiveFocusTracking回调函数里面的buffer参数来实现对系统输入状态切换的监听的。 2.win10及以后的版本包括win11,win server 2019版本只需要解析_OnImmersiveFocusTracking函数以及解析里面的回调buffer即可达到系统输入的切入以及切出状态的监听。但是在win server 2016上,系统输入状态的切出动作不会通过回调通知到应用程序,需要另外通过全局的鼠标钩子来进行另外的处理。 3.win10及以后的版本包括win11,win server 2019版本开启WNF事件只需要创建名为“1ImmersiveFocusTrackingActiveEvent”的Event并设置这个Event事件来开启的(如果不开启这个事件,我们注册的回调函数就不会收到任何通知);而win server 2016则更加复杂,第一因为它安装了很多键盘和鼠标的全局钩子,一旦调试进程就会导致系统特别卡顿,所以TabTip进程是不方便断点调试的,第二TabTip是通过创建名为“1DefaultTIPSharedMemory”的命名管道并把偏移未44的地址设置为1,同时必须调用tiptsf.dll模块的AdviseHook以及StartCaretTracking这两个接口。 ————————————————