很多使用 Windows的朋友,都很讨厌 Office 的全局快捷键,也就是 "Alt+Ctrl+Shift+Windows" 弹出 Office窗口,想禁用掉。
这个组合键在系统里藏得很深,设置根本关不掉。妥妥的就是个流氓快捷键。
Office 快捷键管理助手就是为了解决这个小问题编写的小工具,本程序使用 AU3 编写。
下载地址:
点此下载 《OfficeHotkeyManager.zip》
操作非常简单:
一键屏蔽:点一下"Disable Hotkey",按 "Ctrl+Alt+Windows+Shift" 就不会弹出 Office了。
一键找回:如果想重新用这个快捷键弹出 Office,点一下"Enable Hotkey"就能复原,非常方便。
注意:必须用系统管理员权限运行。
用法:
- 以管理员权限启动本程序:
因为改注册表得有系统最高权限,所以双击打开时,如果弹出"是否允许修改"的UAC安全提醒框,请点"是"允许。 - 点击"Enable"或"Disable"启用或禁用快捷键。
- 弹出"Success"提示框就搞定了。不用重启电脑,现在你就可以按 "ctrl+alt+windows+shift" 四个键试试,保准没反应。
原理:
这个快捷键本质上是在唤起调用系统里的一个叫 ms-officeapp 的协议。
程序的工作原理很简单:在注册表里把这个协议执行命令给替换劫持了。原本按键是让系统"去开 Office",现在被改成了"去运行 rundll32.exe"。因为这个 rundll32 后面没跟任何命令,所以它跑一下就自动静默退出了,不弹出任何窗口。
结果就是键盘按了,系统响应了,但看起来啥反应都没有。
这个工具只是屏蔽快捷键,不会删掉你的 Word 或 Excel,更不会动你的文档,放心使用。
本程序使用 AU3 编写。
autoit3
#NoTrayIcon
#RequireAdmin
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
Global Const $REG_PATH_HKLM = "HKLM\Software\Classes\ms-officeapp\Shell\Open\Command"
Global Const $REG_PATH_HKCU = "HKCU\Software\Classes\ms-officeapp\Shell\Open\Command"
Global Const $TARGET_VAL = "rundll32.exe"
Local $hMainGUI = GUICreate("Office hotkey Manager", 400, 220)
GUISetFont(10, 400, 0, "Microsoft YaHei")
Local $sDescription = "Description:" & @CRLF & _
"This utility manages the 'Ctrl+Win+Alt+Shift' shortcut." & @CRLF & _
"Enable: Restores the default Office app behavior." & @CRLF & _
"Disable: Shortcut key will not open Office app."
GUICtrlCreateLabel($sDescription, 20, 20, 360, 100)
Local $idBtnAction = GUICtrlCreateButton("Checking Status...", 100, 140, 200, 40)
GUISetState(@SW_SHOW)
_RefreshStatus($idBtnAction)
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $idBtnAction
_HandleToggle($idBtnAction)
EndSwitch
WEnd
Func _IsDisabled()
Local $sVal = RegRead($REG_PATH_HKCU, "")
Return ($sVal == $TARGET_VAL)
EndFunc ;==>_IsDisabled
Func _RefreshStatus($ctrlID)
If _IsDisabled() Then
GUICtrlSetData($ctrlID, "Enable Hotkey (&E)")
Else
GUICtrlSetData($ctrlID, "Disable Hotkey (&D)")
EndIf
EndFunc ;==>_RefreshStatus
Func _HandleToggle($ctrlID)
If _IsDisabled() Then
; To Enable: Delete the hijacked keys
RegDelete($REG_PATH_HKLM)
RegDelete($REG_PATH_HKCU)
MsgBox($MB_ICONINFORMATION, "Success", "Office shortcut has been ENABLED.")
Else
; To Disable: Write the hijacked keys
RegWrite($REG_PATH_HKLM, "", "REG_SZ", $TARGET_VAL)
RegWrite($REG_PATH_HKCU, "", "REG_SZ", $TARGET_VAL)
MsgBox($MB_ICONINFORMATION, "Success", "Office shortcut has been DISABLED.")
EndIf
_RefreshStatus($ctrlID)
EndFunc ;==>_HandleToggle