Cela vous permet d'utiliser Win+Tab sur la machine hôte, tandis que Alt+Tab sera transmis à l'hôte. Cette fonctionnalité me manque vraiment quand je ne l'ai pas.
Cela fonctionne également avec la Connexion Bureau à distance de Windows.
Sous le menu de VitualBox, allez dans Fichier > Préférences > Entrée et assurez-vous que [ ] Capture automatique du clavier
n'est pas coché. Cela ne fonctionne pas lorsqu'il est coché.
Cela nécessite AutoHotKey (ou une plateforme de script similaire, vous devrez rechercher la syntaxe pour cela) à exécuter sur le système hôte et invité. Vous pouvez créer un script similaire seulement sur l'hôte, mais vous devrez appuyer sur Alt après chaque utilisation de Win+Tab sur la machine invitée pour libérer l'état de la touche.
Ceci a été écrit pour un hôte Windows 10 vers un invité Windows 10, mais je ne vois pas de raison pour que cela ne fonctionne pas avec d'autres invités. Il existe des programmes comme AutoHotKey qui peuvent permettre à d'autres systèmes hôtes de faire quelque chose de similaire.
Les deux scripts doivent être exécutés en tant qu'administrateur pour pouvoir surveiller les processus qui sont également exécutés en tant qu'administrateur.
Machine hôte
Installez ceci sur la machine hôte, par exemple, WinTabHost.ahk.
#SingleInstance, Force
hostkey = RCTRL ; définissez ceci sur votre HOSTKEY de VirtualBox
boxMode := ""
Hotkey, <#Tab, WinTabbing
Hotkey, >#Tab, WinTabbing
Return
TabFinish:
Send, {ALT UP}
RDCKeysState("Off")
Return
Tabbing:
Send, {Right}
Return
WinTabbing:
WinGetTitle, Title, A
StringRight, TitleEnd, Title, 25
RDCKeysState("On")
If (InStr(Title, "[Running] - Oracle VM VirtualBox")) { ; Mode invité
Send, {%hostkey%} ; Déclencher l'état de capture
Sleep, 200 ; Délai pour laisser le temps à la machine de traiter, juste au cas où
Send, #{TAB} ; Envoyer Win+Tab
Send, {%hostkey%} ; Libérer l'état de capture
} Else If (TitleEnd = "Remote Desktop Connection") and (not Title = "Remote Desktop Connection") { ; Mode RDC
Send, {Alt down}{PgDn} ; Appuyer et maintenir alt, et appuyer sur pgdn
} Else { ; Mode hôte
Send, {ALT Down}{TAB}
Sleep, 200 ; Attendre une fraction de seconde pour que la fenêtre Alt-Tab apparaisse
iter := 0 ; Suivre la boucle
Loop {
iter := iter+1
if (!WinExist("Task Switching") Or iter > 60) { ; Si Alt+tab a disparu, ou s'il s'est écoulé 30 secondes
Send, {ALT UP}
Break
}
Sleep, 500
}
}
Return
RDCKeysState(toggle) {
; Cette fonction mappe toutes les façons dont un utilisateur pourrait terminer la boîte Alt-tab.
Hotkey, Enter, TabFinish, %toggle% ; Mapper Entrée, Clic et leurs équivalents alt à TabFinish()
Hotkey, !Enter, TabFinish, %toggle%
Hotkey, LButton, TabFinish, %toggle%
Hotkey, !LButton, TabFinish, %toggle%
Hotkey, *LWIN UP, TabFinish, %toggle%
Hotkey, *RWIN UP, TabFinish, %toggle%
Hotkey, *Tab, Tabbing, %toggle%
}
; Si vous obtenez l'erreur 'impossible de fermer l'instance précédente du script,'
; en essayant de recharger le script, vous devez cliquer avec le bouton droit dessus et sélectionner
; 'Exécuter en tant qu'administrateur'
Machine invitée
Installez ceci sur la machine invitée, par exemple, WinTabGuest.ahk.
#SingleInstance, Force
SetWorkingDir %A_ScriptDir%
if (not A_IsAdmin) {
Run *RunAs "%A_ScriptFullPath%" ; Exécuter en tant qu'administrateur pour détecter les frappes de touche concentrées sur les programmes avec élévation de privilèges
}
Hotkey, <#Tab, WinTabbing
Return
TabFinish:
Tooltip, TabOut
Send, {ALT UP}
RDCKeysState("Off")
Return
Tabbing:
Send, {Right}
Return
WinTabbing:
Send {Alt DOWN}{TAB}
RDCKeysState("On")
Sleep, 200
iter := 0
Loop
{
iter := iter+1
Sleep, 200
if (!WinExist("Task Switching") Or iter >= 60) {
Send, {ALT UP}
Break
}
Sleep, 500
}
Return
RDCKeysState(toggle) {
Hotkey, Enter, TabFinish, %toggle%
Hotkey, !Enter, TabFinish, %toggle%
Hotkey, LButton, TabFinish, %toggle%
Hotkey, !LButton, TabFinish, %toggle%
Hotkey, *LWIN UP, TabFinish, %toggle%
Hotkey, *RWIN UP, TabFinish, %toggle%
Hotkey, *Tab, Tabbing, %toggle%
}