可靠的自定义Windows快捷键?


9

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

大部分时间都可以正常工作。但是由于令人发指的规律性,有时却并非如此。否则它将长时间延迟(几秒钟)工作。哪个应用当前具有焦点并不重要(它甚至可以是命令提示符之一)。分配什么键都没有关系(我尝试过WIN,CTRL和SHIFT的一些变体)。我确实注意到,这经常但并非总是与以某种方式挣扎的explorer.exe相关(例如,打开的资源管理器窗口无法使用文件共享,或者应用程序无响应,等等)。换句话说,快捷键处理似乎对无关的系统活动非常敏感。请注意,每当遇到此问题时,我总是可以成功地将ALT + TAB转到要进入的窗口,但这很乏味。

我每天都会数百次使用这些命令窗口的快捷方式,因此即使故障率只有1%,也确实很烦人。

是否有解决此问题的方法,或者有一些第三方实用程序可以独立于其他系统活动,从而可靠地拦截自定义按键组合以将焦点集中到我想要的任何应用程序上?

附录:

Windows快捷方式的一个属性,如果切换到第三方热键工具,我也不会丢失:Windows快捷方式是幂等的。 一旦你推出一个快捷方式到一些应用程序,按下快捷键组合再次带你到已发射的过程-它并没有推出一个新的进程。

Answers:


7

使用自动热键。脚本语言是非标准的,很难学习,但是如果您只想可靠地启动程序,它就很简单。另外,您可以根据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并运行它。

每次按任意组合键,AutoHotkey都会扫描此脚本。如果它与a之前的任何键组合匹配::,它将执行下一个命令。如果缺少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基本上是其自己的编程语言。我设置了脚本来模拟整个系统的“ Rocker手势”。我有GMail之类的电子邮件快捷方式。如果您花时间学习它的一些技巧,那么您会对此有所了解。Lifehacker 为Autohotkey 提供了大量有用的脚本。玩得开心!


3
嗯-我依赖的Windows快捷键的一个重要功能是它的幂等性。我第一次按CTRL + SHIFT + U弹出给定提示时,它将启动cmd.exe。下次我按下该组合键时,如果该cmd.exe仍在运行,它只会将其置于最前面,而不是启动另一个实例(这是Autohotkey run命令的作用)。有没有办法可以轻松地通过AHK做到这一点?
彼得·贝尔

3

这是我以符合您幂等要求的方式使用AutoHotKey的方法。

举例来说,我已经将Caps Lock+链接a到Stack Overflow上的Firefox窗口,将Caps Lock+链接s到Super User上的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上的本文。


如何将该脚本修改为不等幂?具体来说,如果我按下快捷键,我想要一个程序的多个实例(我正在运行腻子,并且需要能够在任意给定时间连接到4台以上的服务器,并且不需要伸手去拿鼠标)
Doktor J

如果每个实例的窗口标题中都有特定的唯一文本,则可以分配热键以匹配该文本。有关Firefox的两个不同实例,请参见Caps+aCaps+s上面的内容@DoktorJ
yhw42 2012年

但是,如果我从不希望它匹配怎么办?当我在它们之间切换时,我只是ALT + TAB,所以我不需要每个PuTTY实例的快捷方式-我只需要一个快捷方式,该快捷方式总是打开一个的PuTTY实例,无论我已经有多少个PuTTY窗口开。可以直接从分配的热键调用“运行c:\ tools \ putty \ putty.exe”吗?
Doktor J

@DoktorJ:哦!是。那就是你要怎么做。虽然我认为您也可以在Windows快捷方式属性中分配热键。我以为您要Caps+1指出的是PuTTY的特定实例(在我看来,它比AltTab更好:))。
yhw42 '02 -2-18

3

快速直观地启动程序的另一种选择:

发射式

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

Launchy在开始菜单中为程序编制索引,并且只需几次击键就可以启动文档,项目文件,文件夹和书签!

替代文字


这看起来像Win7开始菜单搜索。
Theo Belaire

@Tyr:是的。我开始在Windows XP中使用它,但在Win7中继续使用它。我没有太多使用开始菜单搜索,但是我的印象是Launchy仍然更快。不过我可能是错的。
Gauthier 2012年

2

不幸的是,六年后的Windows 10仍然存在相同的问题,而在Windows 10的最新更新中,我发现某些快捷方式/程序不再是 幂等的!特别是Putty,在同一会话中我有多个快捷方式。

因此,我使用AutoHotKey并修改了该线程中共享的功能(基于LifeHacker的本文),以便它使用INI文件来跟踪每个快捷方式。这不会使用每个程序的Windows标题,因为如果您将screen或SSH用于另一台服务器,这可能会在Putty中更改,这是我个人希望保留的功能!

还包括一个函数“ DeleteINIEntry()”,您可以创建一个快捷方式以使其从INI文件中删除一个UniqueName条目。或者,您也可以手动编辑和更改文件。

INIFilePath := "C:\Temp\AHK.ini"

RunOrSwitchWin( UniqueName, AppPath )
{  
    global INIFilePath
    IniRead, TargetID, %INIFilePath%, windowids, %UniqueName%
    ActiveID := WinExist("A")

    ; cannot use '=' here as comparing an integar to string doesn't work well
    IfEqual TargetID, %ActiveID%
    {
        WinMinimize 
        return
    }

    WinGet, AllIDs, list

    Loop, %AllIDs%
    {
        this_id := AllIDs%A_Index%

        ifEqual TargetID, %this_id%
        {
            DllCall("SwitchToThisWindow", "UInt", this_id, "UInt", 1)
            return
        }
    }

    run, %AppPath%,,, CurrentPID
    WinWait ahk_pid %CurrentPID%
    IniWrite, % WinExist("A"), %INIFilePath%, windowids, %UniqueName%

   return
}

DeleteINIEntry()
{
    global INIFilePath
    InputBox, UniqueName, Delete INI Entry, Enter UniqueName

    If ErrorLevel = 0
        IniDelete, %INIFilePath%, windowids, %UniqueName%

    return
}

^!3::DeleteINIEntry()

; Putty shortcuts. 
; ^!1 is NOT idempotent and will run it over and over again.
^!1::run "C:\Program Files\PuTTY\putty.exe"
^!2::RunOrSwitchWin( "session1", "C:\Program Files\PuTTY\putty.exe -load session1" )

如果您不希望窗口最小化,则只需将WinMinimize行注释掉(在前面加上;),它将仅聚焦在活动窗口上。



1

如果资源管理器忙,则无法处理快捷方式,因此需要另一个程序。

PS Hot Launch VVL是一个简单高效的启动器:

这是一个免费的实用程序,可让您定义自己的热键,以便单按一次即可启动应用程序,插入常用文本,更改音频音量或几乎其他所有功能。该程序需要Win95 / 98 / ME或WinNT / 2000 / XP,即使在速度较慢的计算机上也表现出色。PS Hot Launch是“开始”菜单和“快速启动”面板的完美替代。

图片

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.