AutoHotKey – Benutzerdefinierte Verknüpfung zum Wechseln zum nächsten/vorherigen Desktop in Windows 10

AutoHotKey – Benutzerdefinierte Verknüpfung zum Wechseln zum nächsten/vorherigen Desktop in Windows 10

Ich habe ein kleines AutoHotKey-Skript zum Wechseln zwischen virtuellen Desktops in Windows 10 geschrieben. Ich habe diesen Code geschrieben, damit ich mit meiner eigenen benutzerdefinierten Tastenkombination zwischen Desktops wechseln kann, anstatt die Standardtastenkürzel von Windows 10 (WIN + STRG + LINKS/RECHTS) zu verwenden.

Code:

#LAlt::^#Right ; switch to next desktop with Windows key + Left Alt key
#LCtrl::^#Left ; switch to next desktop with Windows key + Left CTRL key

Dieser Code funktioniert, aber nur, wenn Sie vor dem Drücken der Tasten auf ein Fenster oder etwas anderes auf dem aktuellen Desktop klicken. Ich habe versucht, mit der Click-Funktion einen Klick zu simulieren, bevor der Desktop gewechselt wurde (was funktioniert hat), aber die Maus wurde an die Koordinaten bewegt, auf die ich geklickt habe, was offensichtlich nicht das ist, was ich will. Ich habe ein bisschen mit ControlClick herumgespielt, aber das hat nie funktioniert.

Meine Frage ist also: Gibt es eine Möglichkeit, den Fokus auf den aktuellen Desktop zu setzen, bevor ich den Befehl zum Wechseln des Desktops ausführe? Oder gibt es vielleicht eine andere Möglichkeit, den Desktop zu wechseln, ohne die standardmäßigen Win 10-Verknüpfungen zu simulieren?

Danke!


BEARBEITEN 1

Mir ist Folgendes aufgefallen: Wenn ich auf die Taskleiste klicke und DANN LWin+ LAlt/ drücke LCtrl, kann ich reibungslos hin- und herwechseln, indem ich und gedrückt halte LWinund zwischen LAltdiesen beiden Tasten wechsle LCtrl.

Wenn ich auf die Taskleiste klicke und dann LWin+ ausführe LAlt, gibt KeyHistory Folgendes aus:

VK  SC  Type    Up/Dn   Elapsed Key     Window
----------------------------------------------
5B  15B     d   1.91    LWin            
A4  038 h   d   0.31    LAlt            
A2  01D i   d   0.00    LControl        
A2  01D i   u   0.00    LControl        
A4  038 i   u   0.00    LAlt            
A2  01D i   d   0.05    LControl        
5B  15B i   d   0.02    LWin            
27  14D i   d   0.02    Right           
27  14D i   u   0.00    Right           
A2  01D i   u   0.01    LControl        
5B  15B i   u   0.02    LWin            
A2  01D i   d   0.01    LControl        
5B  15B i   d   0.00    LWin            
A2  01D i   u   0.00    LControl        
A4  038 s   u   0.00    LAlt            
5B  15B     u   0.06    LWin            
A2  01D i   d   0.00    LControl        
A2  01D i   u   0.00    LControl
(This is what I want it to do without clicking the taskbar)

Aber wenn ich EINFACH LWin+ drücke LAlt, zeigt KeyHistory, dass die Tastenereignisse nach dem Ereignis „Right Up“ enden:

VK  SC  Type    Up/Dn   Elapsed Key     Window
----------------------------------------------
5B  15B     d   1.91    LWin            
A4  038 h   d   0.31    LAlt            
A2  01D i   d   0.00    LControl        
A2  01D i   u   0.00    LControl        
A4  038 i   u   0.00    LAlt            
A2  01D i   d   0.05    LControl        
5B  15B i   d   0.02    LWin            
27  14D i   d   0.02    Right           
27  14D i   u   0.00    Right
(There should be more after this)

Das LControl Up-Ereignis wird nie ausgelöst und das scheint alles durcheinander zu bringen.

Antwort1

Manchmal, wenn Sie versuchen, Modifikatortasten (Win/Strg/Alt) zu senden und die auslösende Zeichenfolge ebenfalls Modifikatortasten enthält, müssen Sie warten, bis die auslösenden Tasten losgelassen werden. Andernfalls wirken sie sich, wie Sie feststellen, auf die Ersetzungszeichenfolge aus.

Versuchen Sie KeyWaitdies mit zu erreichen. Beachten Sie, dass wir jetzt Hotkey-Syntax anstelle von Hotstring verwenden

#LAlt:: ; switch to next desktop with Windows key + Left Alt key
  KeyWait LAlt
  SendInput #^{Right}
  Return

#LCtrl:: ; switch to previous desktop with Windows key + Left CTRL key
  KeyWait LCtrl
  SendInput #^{Left}
  Return

Zum Wechseln des Desktops hat das oben genannte bei mir funktioniert.

In anderen Fällen funktioniert selbst dieser Ansatz nicht und es gibt eine andere mögliche Lösung. Anstatt Schlüsselwartezeiten wie diese...

KeyWait LAlt
KeyWait LCtrl

… durch den entsprechenden dieser Tastenanschläge ersetzen, um den Status der Taste zu löschen:

Send,{LAlt Down}{LAlt Up}
Send,{LCtrl Down}{LCtrl Up}

Antwort2

Falls ich nicht irgendwo etwas übersehen habe, wechselt Windows + ctrl+ / Pfeil nicht zwischen Desktops? Zumindest bei mir ist das so.

Antwort3

Ich weiß nicht, ob es noch relevant ist, aber „pzone“ von Reddit hat ein Skript geschrieben, das eine Funktion mit einer globalen Variable verwendet, die sich merkt, auf welchem ​​Desktop Sie sich befinden, und auf diese Weise können Sie einen Hotkey zuweisen, um zwischen zwei Desktops umzuschalten. Es funktioniert nur, wenn Sie 2 Desktops haben.

switchedDesktop := false
switchDesktop() 
{
  global switchedDesktop
    if switchedDesktop
    {
        SendEvent ^#{Right}
        switchedDesktop := false
    }
    else
    {
        SendEvent ^#{Left}
        switchedDesktop := true
    }
}

https://www.reddit.com/r/AutoHotkey/comments/3fyudo/automatically_switch_between_windows_10_virtual

Antwort4

Zum Beispiel möchte ich Bild ab für den nächsten Desktop und Bild auf für den vorherigen Desktop festlegen. Nachdem ich AutoHotkey installiert habe, erstelle ich ein neues AutoHotKey-Skript, füge diese Codes hinzu, speichere es und führe das Skript aus.

PgDn::^#Right ;Next Desktop
return 

PgUp::^#Left ;Previous Desktop
return 

und es wird gut funktionieren :)

verwandte Informationen