2016-03-13 18 views
8

Ok. Wiem, że to bardzo głupie pytanie. Ale utknąłem już na godzinę.Jaki jest właściwy sposób wysyłania Alt + Tab w Ahk?

Mam bardzo małe doświadczenie z ahkiem, jednak do tej pory robiłem każdy skrypt bez żadnych problemów. Zbadałem samouczki ahk, ale do tej pory nie znalazłem żadnego rozwiązania.

Próbuję przejść do poprzedniej. aplikacja z jednym klawiszem wyłączania klawiatury numerycznej. Próbowałem:

!{Tab} 

,

{Alt down}{Tab}{Alt up} 

Próbowałem go z opóźnieniami sen, multilinii, multilinii wewnątrz wsporników, i bez przecinków po poleceń itp

I Jestem pewien, że jest bardzo prosty, ale coś, czego jeszcze nie próbowałem.

Jakieś sugestie?

Odpowiedz

5
; AltTab-replacement for Windows 8: 

F1:: 
List = 
WinGet, AllWinsHwnd, List 
Loop, % AllWinsHwnd 
{ 
    WinGet, exStyle, exStyle, % "ahk_id" AllWinsHwnd%A_Index% 
    If !(exStyle & 0x100) 
     continue 
    WinGetTitle, CurrentWinTitle, % "ahk_id " AllWinsHwnd%A_Index% 
    If (CurrentWinTitle = "") 
     continue 
    IfWinActive, % "ahk_id " AllWinsHwnd%A_Index% 
     continue 
    WinActivate, % "ahk_id " AllWinsHwnd%A_Index% 
     break 
} 
return 



; AltTabMenu-replacement for Windows 8: 

F2:: 
List = 
Menu, windows, Add 
Menu, windows, deleteAll 
WinGet, AllWinsHwnd, List 
Loop, %AllWinsHwnd% 
{ 
    WinGet, exStyle, exStyle, % "ahk_id" AllWinsHwnd%A_Index% 
    If !(exStyle & 0x100) 
     continue 
    WinGetTitle, CurrentWinTitle, % "ahk_id " AllWinsHwnd%A_Index% 
    If (CurrentWinTitle = "") 
     continue 
    WinGetClass, CurrentWinClass, % "ahk_id " AllWinsHwnd%A_Index% 
    Menu, windows, Add, %CurrentWinTitle%, ActivateTitle 
    WinGet, Path, ProcessPath, % "ahk_id " AllWinsHwnd%A_Index% 
    If (CurrentWinClass = "ApplicationFrameWindow") 
     Menu, windows, Icon, %CurrentWinTitle%, %A_WinDir%\System32\SHELL32.dll, 3, 0 
    else 
     Menu, windows, Icon, %CurrentWinTitle%, %Path%,, 0 
} 
CoordMode, Mouse, Screen 
MouseMove, (0.4*A_ScreenWidth), (0.35*A_ScreenHeight) 
CoordMode, Menu, Screen 
Xm := (0.25*A_ScreenWidth) 
Ym := (0.25*A_ScreenHeight) 
Menu, windows, Show, %Xm%, %Ym% 
return 

ActivateTitle: 
SetTitleMatchMode 3 
WinActivate, %A_ThisMenuItem% 
return 
+0

Tego właśnie szukałem! Działa świetnie! Dzięki! –

2

Nie powinieneś ręcznie wysyłać alt + tab, ponieważ jest to specjalne polecenie Windows, a raczej użyj AltTab commands, która to zrobi dla ciebie.

AltTabMenu otwiera menu karty i wybiera program, a następnie przechodzę przez niego AltTab, ShiftAltTab.

h::AltTabMenu 
n::AltTab 
m::ShiftAltTab 
+0

Cóż, wydawało się to dobrym rozwiązaniem, ale nie mogłem sprawić, żeby działało. –

+0

Przestudiowałem to dogłębnie i niezależnie od tego, jak piszę scenariusz, klucz, który ma otworzyć AltTabMenu lub Send Alt + Tab, w jakiś sposób ignoruje "Tabulaturę", a skrypt nie działa dopóki nie naciśnie klawisza skrótu + prawdziwa Tab na moim klawiatura. –

+0

@GlebG Otwórz nowy pusty plik tekstowy, skopiuj powyższy kod do pliku, zapisz jako * test.ahk * i uruchom plik. Następnie naciśnij przyciski: 'h n m h' – 2501

0

Cóż, w końcu znalazłem przyczynę i jakieś "rozwiązania" here i here. Wygląda na to, że Windows 8 blokuje Ahk {Alt w dół} {Tab} i AltTabMenu i kilka innych klawiszy.

Na razie używam tego, aby przewinąć do przodu okna:

Send !{ESC} 

to wyświetlenie AltTabMenu:

Run, "C:\Users\Default\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\Window Switcher.lnk" 

I to, aby przejść do poprzedniej aplikacji jak zasugerował w jednym z tematy:

LCtrl & z:: ; AltTabMenu 


state := GetKeyState("Capslock", "T") 
if state = 1 
SetCapsLockState, Off ; CapsLock On blocks Task Switching metro window 

Send, !{Tab} ; prevents displaying inactive Task Switching metro window 
run, Window Switcher.lnk ; must be in script directory otherwise include path 
WinWait, Task Switching,, 2 
KeyWait, Ctrl 
Send, {Enter} 

if state = 1 
SetCapsLockState, On ; restores CapsLock State 
state = 

return 

#IfWinActive, Task Switching 
LCtrl & q::Send, {Right} 
LCtrl & a::Send, {Left} 

Byłoby wspaniale dostać się do poprzedniej aplikacji bez rozpryskiwania AltTabMenu.

3

Jeśli tylko chcesz, aby powrócić do poprzedniej aplikacji, należy użyć Send! {Esc}

+0

Cóż, właśnie tego używałem. Ale nie było to dokładnie to, czego szukałem. Rozumiem, że przełącza się na prev. aplikacja w kolejności, w jakiej działała. Więc działa, aby przejść do prev. aplikacja, ale nie, aby przełączać się wstecz. Dzięki i tak! –

2

Są pewne problemy z systemem Windows 8/10 i klawisze jak Ctrl-Alt-Del i Alt patka. Oto jedno rozwiązanie:

F1:: 
    { 
     Send {Alt Down}{Tab} ;Bring up switcher immediately    
     KeyWait, F1, T.5 ; Go to next window; wait .5s before looping 
     if (Errorlevel) 
     {  
     While (GetKeyState("F1","P")) { 
      Send {Tab}   
      Sleep, 400 ; wait 400ms before going to next window 
     } 
    } 
     Send {Alt Up} ;Close switcher on hotkey release 
} 
return 
Powiązane problemy