可靠的自定义 Windows 快捷键?

可靠的自定义 Windows 快捷键?

我将全局 Windows 快捷键分配给了几个不同的 cmd.exe 实例。我通过在桌面上创建 cmd.exe 的快捷方式并为每个快捷键分配一个唯一的快捷键(例如,CTRL + SHIFT + U)来实现这一点。非常基本的东西。我使用的是 Win2K8(R1 和 R2)。

大多数情况下,这都可以正常工作。但令人恼火的是,有时它却不行。或者需要很长时间(很多秒)才能正常工作。哪个应用程序当前具有焦点并不重要(它甚至可以是命令提示符之一)。我分配了哪些键并不重要(我尝试了 WIN、CTRL 和 SHIFT 的几个变体)。我确实注意到,这通常(但并非总是)与 explorer.exe 以某种方式挣扎有关(例如,打开的资源管理器窗口指向不可用的文件共享,或者应用程序没有响应,等等)。换句话说,快捷键处理似乎对不相关的系统活动非常敏感。请注意,每当我遇到这个问题时,我总是可以成功地按 ALT + TAB 进入我想要的窗口,但这很乏味。

我每天都会使用这些命令窗口的快捷方式数百次,因此即使是 1% 的失败率也会变得非常烦人。

有没有办法解决这个问题,或者是否有一些第三方实用程序可以可靠地拦截自定义组合键,以便将焦点放在我想要的任何应用程序上,并且不依赖于其他系统活动?

附录:

如果切换到第三方热键工具,我并不想丢失 Windows 快捷方式的一个属性:Windows 快捷方式是幂等的。 一旦你启动了某个应用程序的快捷方式,再次按下快捷键组合就会带你回到已经启动的进程——确实如此不是启动一个新流程。

答案1

使用 Autohotkey。该脚本语言是非标准的,可能很难学习,但如果您只想可靠地启动程序,那么它很简单。此外,您还可以根据 Windows 键设置快捷方式!使用以下示例脚本并根据您的需要进行修改。(以 开头的行;是注释。)

;win + alt + e ... unload ipod
#!E::
   run d:\Downloads\Apps\deveject\eject ipod.bat
   return

;win + w ... launch winamp
#w::
    run c:\program files (x86)\winamp\winamp.exe
    return

;win + a ... launch AS400
#a::
    run C:\Program Files (x86)\IBM\Client Access\Emulator\Private\1.ws
    return

;win + Shift a ... launch AS400 Printer
#+a::
    run C:\Program Files (x86)\IBM\Client Access\Emulator\Private\3.ws
    return

;win + ctrl + Shift a ... launch 2nd AS400 
#^+a::
    run C:\Program Files (x86)\IBM\Client Access\Emulator\Private\2.ws
    return

将其保存为桌面上的 .ahk 文件,安装自动热键并运行它。

每次按下任何组合键时,AutoHotkey 都会扫描此脚本。如果它与 之前的任何组合键匹配::,它将执行下一个命令。如果缺少 return 语句,AHK 将在执行语句后继续扫描脚本以查找匹配项。组合键如下所述。

# = Windows Key
+ = Shift
^ = Control
! = Alt

您可以将这些与键盘上的字母任意组合使用。我发现一个非常有用的组合如下。

; ALT Backtick ... ctrl f4
!`::
    Loop, parse, RcvCtrlW, `,
    {
     IfWinActive %A_LoopField%
     {
        sendinput ^w
        Return
     }
    }
    sendinput ^{f4}
    return

; win Backtick ... alt f4
#`::
   sendinput !{f4}
   return   

这是 Alt + ` 和 Win + `。当此脚本运行时,我按下 alt + `,脚本会发送 ctrl + F4。Win + ` 变成 alt + F4。

Autohotkey 基本上是它自己的编程语言。我设置了脚本来模拟整个系统的“摇杆手势”。我的电子邮件有类似 GMail 的快捷方式。如果你花时间学习它的一些技巧,你就可以玩得开心。Lifehacker 有很多有用的脚本适用于 Autohotkey。玩得开心!

答案2

以下是我的使用方法自动热键以符合你的方式幂等要求。

举例来说,我已将Caps Lock+挂接a到 Stack Overflow 上的 Firefox 窗口,Caps Lock将 +s挂接到超级用户的 Firefox,并将Caps Lock+d挂接到命令提示符。

StartOrToggleMinimize(TheWindowTitle,TheAppPath)
{  
   SetTitleMatchMode, 2
   DetectHiddenWindows, Off
   IfWinActive, %TheWindowTitle%
   {
      WinMinimize, %TheWindowTitle%
   }
   else
   { 
      IfWinExist, %TheWindowTitle%
      {
         WinGet, winid, ID, %TheWindowTitle%
         DllCall("SwitchToThisWindow", "UInt", winid, "UInt", 1)
      }
      else
      {
         run %TheAppPath%
      }
   }
   return
}

; the actual hotkeys:
CapsLock & a::StartOrToggleMinimize("Stack Overflow", "c:\program files\mozilla firefox\firefox.exe -new-window stackoverflow.com")
CapsLock & s::StartOrToggleMinimize("Super User", "c:\program files\mozilla firefox\firefox.exe -new-window superuser.com")
CapsLock & d::StartOrToggleMinimize("cmd", "cmd")

你可以更改标题匹配模式尽可能严格。如果我有另一个与“Mozilla Firefox”(而不是“超级用户”)匹配的热键,它将循环遍历我的所有 Firefox 实例,因为每个实例的窗口标题中都有该文本,并且我已将其设置为与标题中任何位置的文本匹配。

该脚本主要基于LifeHacker 上的这篇文章。

答案3

还有另一种快速直观地启动程序的方法:

Launchy

Launchy 是一款免费的 Windows 和 Linux 实用程序,旨在帮助您忘记开始菜单、桌面上的图标甚至文件管理器。

Launchy 会索引您开始菜单中的程序,并且只需按几次键即可启动您的文档、项目文件、文件夹和书签!

替代文本

答案4

它并不是不相关的活动,explorer是处理这些快捷方式的进程。

有实用程序(例如http://www.vsisystems.com/keyboardshortcuts.htm) 声称具有此功能,但我不知道它们是否能解决速度问题。

相关内容