佬,其实我挺纠结的,因为这个问题太邪门,下面是ai给出的结果,我也看不懂。我只会ai
1.原因一:Home 键在笔记本上失效
很多笔记本没有独立 Home 键,Home 是通过 Fn+← / Fn+End 等组合实现的。
Fn 键由键盘固件处理,不会产生 WM_KEYDOWN 消息,系统看到的扫描码与台式机独立 Home 键不同,导致 RegisterHotKey 注册的 VK_HOME (0x24) 无法被触发。
2.原因二:Shift+空格 能触发(更关键)
这是中文输入法(IME)的经典冲突:
大量中文 IME(搜狗、讯飞、微软拼音等)把 Shift+Space 作为全角/半角切换的系统级快捷键
IME 的某些版本在处理 Shift+Space 时,会先向系统发一个 VK_HOME (0x24) 的 IME 合成按键消息,再处理自己的逻辑
你的代码注册的是 MOD_NONE + VK_HOME,没有修饰键限制,这个合成消息恰好命中
根本原因是:RegisterHotKey 使用 MOD_NONE 时,任何来源产生的该 VK 消息都会触发,包括 IME 合成的。
3.原因三:快捷键无法修改
设置窗口用 PreviewKeyDown 捕获按键,但在这台笔记本上:
用户按 Fn+← 想设成 Home,系统传给 WPF 的是 Key.Left(Fn 被固件拦截)
按 Home(通过 IME 合成)又立刻触发了隐藏/显示,设置窗口可能瞬间关闭或焦点丢失