Zuverlässige benutzerdefinierte Windows-Tastenkombinationen?

9

Ich habe globale Windows-Tastenkombinationen, die mehreren verschiedenen cmd.exe-Instanzen zugewiesen sind. Dazu erstelle ich Verknüpfungen zu cmd.exe auf meinem Desktop und weise jedem eine eindeutige Tastenkombination zu (z. B. STRG + UMSCHALT + U). Ziemlich einfaches Zeug. Ich benutze Win2K8 (R1 und R2).

Das funktioniert gut ... die meiste Zeit. Aber mit wütender Regelmäßigkeit manchmal nicht. Oder es funktioniert mit einer langen Verzögerung (viele Sekunden). Es spielt keine Rolle, welche App derzeit den Fokus hat (dies kann sogar eine der Eingabeaufforderungen sein). Es spielt keine Rolle, welche Tasten ich zuweise (ich habe einige Variationen von WIN, CTRL und SHIFT ausprobiert). Mir ist aufgefallen, dass dies oft, aber nicht immer, mit explorer.exe korreliert, das auf die eine oder andere Weise Probleme hat (z. B. ein Explorer-Fenster, das für eine Dateifreigabe geöffnet wurde, die nicht verfügbar ist, oder eine App, die nicht reagiert, oder was auch immer). Mit anderen Worten, die Handhabung von Tastenkombinationen scheint sehr empfindlich gegenüber nicht verwandten Systemaktivitäten zu sein. Beachten Sie, dass ich bei diesem Problem immer erfolgreich ALT + TAB zu dem Fenster führen kann, zu dem ich gelangen möchte, aber das ist mühsam.

Ich verwende die Verknüpfungen zu diesen Befehlsfenstern hunderte Male am Tag, sodass selbst eine Fehlerrate von 1% wirklich ärgerlich wird.

Gibt es eine Möglichkeit, dies zu beheben, oder gibt es ein Dienstprogramm eines Drittanbieters, das benutzerdefinierte Tastenkombinationen ZUVERLÄSSIG abfängt, um den Fokus auf die von mir gewünschten Apps zu legen, und zwar unabhängig von anderen Systemaktivitäten?

NACHTRAG:

Es gibt eine Eigenschaft der Windows-Verknüpfungen, die ich beim Wechsel zu einem Hotkey-Tool eines Drittanbieters nicht verlieren möchte: Windows-Verknüpfungen sind idempotent. Sobald Sie eine Verknüpfung zu einer App gestartet haben, gelangen Sie durch erneutes Drücken der Tastenkombination zum bereits gestarteten Prozess. Es wird kein neuer Prozess gestartet .

Peter Bär
quelle

Antworten:

7

Verwenden Sie den Autohotkey. Die Skriptsprache ist nicht Standard und kann schwierig zu erlernen sein. Wenn Sie jedoch nur Programme zuverlässig starten möchten, ist dies einfach. Außerdem können Sie Verknüpfungen über die Windows-Taste erstellen! Verwenden Sie das folgende Beispielskript und passen Sie es an Ihre Bedürfnisse an. (Zeilen, die mit beginnen, ;sind Kommentare.)

;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

Speichern Sie diese als .ahk-Datei auf Ihrem Desktop, installieren Sie den Autohotkey und führen Sie ihn aus.

Jedes Mal, wenn Sie eine Tastenkombination drücken, scannt AutoHotkey dieses Skript. Wenn es mit einer der Tastenkombinationen übereinstimmt, die vor a stehen ::, wird der nächste Befehl ausgeführt. Wenn die return-Anweisung fehlt, durchsucht die AHK das Skript nach Ausführung Ihrer Anweisung weiter nach Übereinstimmungen. Die Tastenkombinationen werden unten beschrieben.

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

Sie können diese in beliebiger Kombination mit den Buchstaben Ihrer Tastatur verwenden. Eine Kombination, die ich äußerst nützlich finde, ist folgende.

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

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

Dies ist Alt + `und Win +`. Wenn dieses Skript ausgeführt wird und ich Alt + `drücke, sendet das Skript Strg + F4. Win + `wird alt + F4.

Autohotkey ist im Grunde eine eigene Programmiersprache. Ich habe Skripte eingerichtet, die systemweit "Rocker Gestures" simulieren. Ich habe GMail-ähnliche Verknüpfungen für meine E-Mail. Wenn Sie die Zeit damit verbringen, einige seiner Tricks zu lernen, können Sie damit verrückt werden. Lifehacker hat eine ganze Reihe nützlicher Skripte für Autohotkey. Habe Spaß!

Tim Coker
quelle
3
Hmm - ein wichtiges Merkmal der Windows-Tastenkombination, auf die ich mich verlasse, ist ihre Idempotenz. Wenn ich zum ersten Mal STRG + UMSCHALT + U drücke, um eine bestimmte Eingabeaufforderung aufzurufen, wird cmd.exe gestartet. Wenn ich diese Combo das nächste Mal drücke und diese cmd.exe noch ausgeführt wird, wird sie einfach nach vorne verschoben, anstatt eine andere Instanz zu starten (wie es der Befehl Autohotkey run ausführt). Gibt es eine Möglichkeit, dies mit AHK einfach zu tun?
Peter Bär
3

So verwende ich AutoHotKey auf eine Weise, die Ihren idempotenten Anforderungen entspricht.

Als Beispiel habe ich Caps Lock+ aein Firefox-Fenster bei Stack Overflow, Caps Lock+ sFirefox bei Super User und Caps Lock+ deine Eingabeaufforderung angeschlossen.

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")

Sie können den Titelübereinstimmungsmodus so einschränken, dass er so restriktiv ist, wie Sie es benötigen. Wenn ich einen anderen Hotkey hätte, der mit "Mozilla Firefox" übereinstimmt (anstelle von "Super User" zum Beispiel), würde er alle meine Firefox-Instanzen durchlaufen, da jeder diesen Text im Fenstertitel hat und ich ihn so eingestellt habe, dass er mit dem Text übereinstimmt irgendwo im Titel.

Dieses Skript basiert stark auf diesem Artikel bei LifeHacker.

yhw42
quelle
Wie kann dieses Skript so geändert werden, dass es NICHT idempotent ist? Insbesondere möchte ich mehrere Instanzen eines Programms, wenn ich die Tastenkombinationen drücke (ich verwende Putty und muss zu jedem Zeitpunkt eine Verbindung zu mehr als 4 Servern herstellen können und nicht nach der Maus greifen müssen )
Doktor J
Wenn der Fenstertitel für jede Instanz einen bestimmten, eindeutigen Text enthält, können Sie Hotkeys zuweisen, die diesem Text entsprechen. Siehe die Caps+aund Caps+soben für zwei verschiedene Instanzen von Firefox, @DoktorJ
yhw42
Aber was ist, wenn ich nie möchte, dass es passt? Wenn ich zwischen ihnen wechsle, verwende ich nur ALT + TAB, sodass ich keine Verknüpfungen für jede Instanz von PuTTY benötige. Ich benötige nur eine Verknüpfung, die immer eine neue Instanz von PuTTY öffnet , egal wie viele PuTTY-Fenster ich bereits habe offen haben. Wird dies nur durch Aufrufen von "run c: \ tools \ putty \ putty.exe" direkt über den zugewiesenen Hotkey ausgeführt?
Doktor J
@ DoktorJ: Oh! Ja. Genau so würden Sie es machen. Ich denke jedoch, dass Sie Hotkeys auch in den Windows-Verknüpfungseigenschaften zuweisen können. Ich hatte angenommen, Sie Caps+1wollten auf eine bestimmte Instanz von PuTTY verweisen (was meiner Meinung nach besser ist als AltTab :)).
Yhw42
3

Eine weitere Alternative, um Ihre Programme schnell und intuitiv zu starten:

Launchy

Launchy ist ein kostenloses Windows- und Linux-Dienstprogramm, mit dem Sie Ihr Startmenü, die Symbole auf Ihrem Desktop und sogar Ihren Dateimanager vergessen können.

Launchy indiziert die Programme in Ihrem Startmenü und kann Ihre Dokumente, Projektdateien, Ordner und Lesezeichen mit nur wenigen Tastenanschlägen starten!

Alt-Text

Gauthier
quelle
Dies sieht aus wie die Win7-Startmenüsuche.
Theo Belaire
@ Tyr: das tut es. Ich habe damit begonnen, dies in Windows XP zu verwenden, aber weiterhin in Win7. Ich habe die Startmenüsuche nicht sehr oft verwendet, aber ich habe den Eindruck, dass Launchy immer noch schneller ist. Darin kann ich mich jedoch irren.
Gauthier
2

Leider gibt es 6 Jahre später unter Windows 10 dieselben Probleme, und bei einem kürzlich durchgeführten Windows 10-Update stellte ich fest, dass einige Verknüpfungen / Programme nicht mehr idempotent sind ! Besonders Putty, wo ich mehrere Verknüpfungen für dieselbe Sitzung habe.

Daher verwende ich AutoHotKey und habe die in diesem Thread freigegebene Funktion (basierend auf diesem Artikel bei LifeHacker ) so geändert , dass eine INI-Datei verwendet wird, um jede Verknüpfung zu verfolgen. Dies verwendet nicht den Windows-Titel jedes Programms, da sich dies in Putty ändern kann, wenn Sie Bildschirm oder SSH auf einem anderen Server verwenden, eine Funktion, die ich persönlich beibehalten möchte!

Ebenfalls enthalten ist eine Funktion "DeleteINIEntry ()", mit der Sie eine Verknüpfung erstellen können, um einen UniqueName-Eintrag aus der INI-Datei zu entfernen. Oder Sie können die Datei einfach manuell bearbeiten und ändern.

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" )

Wenn Sie nicht möchten, dass das Fenster minimiert wird, kommentieren Sie einfach die WinMinimize-Zeile aus (stellen Sie ein; voran), und es bleibt nur auf das aktive Fenster fokussiert.

agalest
quelle
1

Es handelt sich nicht um eine unabhängige Aktivität. Der Explorer ist der Prozess, der diese Verknüpfungen verarbeitet.

Es gibt Dienstprogramme (z. B. http://www.vsisystems.com/keyboardshortcuts.htm ), die diese Funktionalität vorgeben, aber ich weiß nicht, ob eines von ihnen das Geschwindigkeitsproblem lösen würde.

Ofir
quelle
1

Wenn der Explorer beschäftigt ist, kann er die Verknüpfungen nicht verarbeiten, sodass ein anderes Programm erforderlich ist.

Ein einfacher und effizienter Launcher ist PS Hot Launch VVL :

Dies ist ein kostenloses Dienstprogramm, mit dem Sie Ihre eigenen Hotkeys definieren können, sodass mit einem einzigen Tastendruck eine Anwendung gestartet, häufig verwendeter Text eingefügt, die Lautstärke geändert oder fast alles andere. Das Programm erfordert Win95 / 98 / ME oder WinNT / 2000 / XP und ist selbst auf langsamen Maschinen eine hervorragende Leistung. PS Hot Launch ist die perfekte Alternative zum Startmenü und zum Schnellstartfenster.

Bild

harrymc
quelle