Skip to content
gdtoolsPublic

About

把 HP 光影精灵/暗影精灵(Victus/OMEN) 的 OMEN 功能键、计算器键、Insert、PrtSc 映射为 Home/End/PageUp/PageDown,运行即自动安装并开机自启

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Repository files navigation

OmenKey

把 HP 光影精灵 / 暗影精灵(Victus / OMEN 系列)笔记本上那几个「用不上的功能键」换成 Home / End / PageUp / PageDown 的小工具。

单文件 C# 程序,无第三方依赖,只用系统自带的 .NET Framework。运行一次就自动安装并注册开机自启,之后完全无感。

默认映射

物理键 默认替换为 识别方式
OMEN 功能键 Home BIOS WMI 事件 hpqBEvnt(eventData=8613, eventId=29)
计算器键 End 低级键盘钩子(VK_LAUNCH_APP2 = 0xB7)
Insert 键 PageUp 低级键盘钩子(VK_INSERT = 0x2D)
PrtSc 键 PageDown 低级键盘钩子(VK_SNAPSHOT = 0x2C)

按下 OMEN 键时,程序会顺手把被系统弹出的 OMEN Gaming Hub 关掉,避免每次都弹一个商店窗口。

安装(就一步)

到 Releases 下载 OmenKey-vX.Y.Z.zip,解压后双击 OmenKey.exe。

首次运行会自动完成三件事(需要管理员权限,UAC 弹窗请允许):

  1. 把自己复制到 C:\Program Files\OmenKey\OmenKey.exe(连同 OmenKey.ini、stop.bat)
  2. 注册计划任务 OmenKey:登录时以最高权限启动,所以每次开机不会再弹 UAC
  3. 从安装目录重新启动自己,然后常驻后台(无窗口)

安装后下载目录里的那份可以删掉,下次开机会自动用安装目录的副本运行。

卸载

双击 uninstall.bat(或执行 OmenKey.exe uninstall)取消开机自启,再删掉 C:\Program Files\OmenKey 目录即可。

也可以在「计划任务」里删掉 OmenKey:

schtasks /delete /tn "OmenKey" /f

日常操作

OmenKey.exe            启动(已安装时直接以安装目录副本运行)
OmenKey.exe stop       停止当前运行的实例
OmenKey.exe uninstall  取消开机自启

停止:双击 stop.bat。重新启用:双击 OmenKey.exe 或重启电脑。

配置

改 C:\Program Files\OmenKey\OmenKey.ini(需要管理员权限才能保存),改完 stop.bat 停掉再启动生效。

程序只读取「自身所在目录」的 ini。首次安装时会把运行目录里同名的 ini 复制过去,所以也可以在解压目录里先改好再运行。

# 物理键 = 目标键;右边留空表示「不替换」,该键保持原功能
Omen   = Home
Calc   = End
Insert = PageUp
PrtSc  = PageDown
  • 右边留空(或写 none / off / 0)→ 不替换,按键原样放行
  • 配置文件不存在也能运行,直接用上面这套默认值
  • 键名不区分大小写,可用:Home End PageUp(PgUp) PageDown(PgDn) Insert(Ins) Delete(Del) PrintScreen(PrtSc) Esc Up Down Left Right Space Enter Tab Backspace Apps F1~F24
  • 键名写错时保持默认值,不会把映射改坏

注意:默认配置下 PrtSc 会失去截图功能。需要保留就写成 PrtSc =(留空)。

原理

OMEN 键为什么不能普通改键

OMEN 功能键的按下信号在 EC/BIOS 固件层就被转成了 WMI 事件上报,根本没有进入键盘 HID 通道——所以 PowerToys、AutoHotkey、SharpKeys、WH_KEYBOARD_LL 这些常规方案全都看不到这个键。

程序的做法是:用 ManagementEventWatcher 直接订阅 root\wmi 命名空间下的 BIOS 事件类 hpqBEvnt,读 eventId / eventData 判断是不是 OMEN 键,命中就 SendInput 发出目标键。

几个踩过的坑(已修):

  • hpqBEvnt 是 BIOS 提供的外生事件(extrinsic event),WQL 不支持对它做 WHERE 属性过滤,加了过滤会一条事件都收不到 → 改为订阅全量 SELECT * FROM hpqBEvnt,在代码里比对
  • 一次按下会连发多条事件(不同 eventType)→ 用 300ms 去重
  • INPUT 结构体的联合体必须包含最大的成员 MOUSEINPUT,否则 x64 下会算成 32 字节(正确是 40),SendInput 会因 cbSize 非法直接返回 0、静默什么都不发

其余按键

计算器键、Insert、PrtSc 都发标准键码,用 WH_KEYBOARD_LL 低级键盘钩子拦截,按下时改发目标键,并把 keydown/keyup 一起吞掉。

开机自启为什么用计划任务

写注册表 Run 项的话,因为程序需要管理员权限,每次开机都会弹一次 UAC。改用「登录时触发 + 最高权限」的计划任务,既不弹 UAC,也不用常驻服务。

机型适配

eventData = 8613 / eventId = 29 是在 HP Victus 16-r0xxx 上实测确认的值,其它型号可能不同。如果 OMEN 键不生效,可以这样查:

  1. 用 OmenXHub 或任意 WMI 事件查看工具订阅 root\wmi 的 hpqBEvnt
  2. 按一下 OMEN 键,看新出现的事件里 eventId / eventData 是多少
  3. 改 OmenKey.cs 顶部的 OMEN_EVENT_ID / OMEN_EVENT_DATA 常量后重新编译

构建

无需安装任何 SDK,系统自带的 .NET Framework 编译器即可(Windows 10/11 默认都有):

build.bat

等价命令:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /nologo /target:exe /codepage:65001 ^
    /r:System.Management.dll /out:OmenKey.exe OmenKey.cs

推一个 v* 形式的 tag 会触发 GitHub Actions 自动编译并发布 Release:

git tag v1.0.0 && git push origin v1.0.0

系统要求

  • Windows 10 / 11(x64 / x86)
  • .NET Framework 4.x(系统自带,无需额外安装)
  • 管理员权限(写 Program Files、注册计划任务、订阅 BIOS WMI 事件)
  • 仅适用于 HP Victus / OMEN 系列(OMEN 键识别依赖 HP 的 BIOS WMI 事件类)

License

MIT

About

把 HP 光影精灵/暗影精灵(Victus/OMEN) 的 OMEN 功能键、计算器键、Insert、PrtSc 映射为 Home/End/PageUp/PageDown,运行即自动安装并开机自启

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages