确定。我知道这是一个非常愚蠢的问题。 但是我已经被困了一个小时了。
我对ahk的经验很少,但是到目前为止,每个脚本都没有问题。我探讨了ahk教程,但到现在为止找不到任何解决方案。
我试图切换到prev。应用程序只有一个小键盘关键。 我试过了:
!{Tab}
,
{Alt down}{Tab}{Alt up}
我已尝试过睡眠延迟,多行,多行内括号,命令后有逗号和无逗号等等。
我很确定这很简单,但我还没有尝试过。
有什么建议吗?
答案 0 :(得分:10)
$F1:: AltTab()
$F2:: AltTabMenu()
; AltTab-replacement for Windows 8:
AltTab(){
list := ""
WinGet, id, list
Loop, %id%
{
this_ID := id%A_Index%
IfWinActive, ahk_id %this_ID%
continue
WinGetTitle, title, ahk_id %this_ID%
If (title = "")
continue
If (!IsWindow(WinExist("ahk_id" . this_ID)))
continue
WinActivate, ahk_id %this_ID%, ,2
break
}
}
; AltTabMenu-replacement for Windows 8:
AltTabMenu(){
list := ""
Menu, windows, Add
Menu, windows, deleteAll
WinGet, id, list
Loop, %id%
{
this_ID := id%A_Index%
WinGetTitle, title, ahk_id %this_ID%
If (title = "")
continue
If (!IsWindow(WinExist("ahk_id" . this_ID)))
continue
Menu, windows, Add, %title%, ActivateTitle
WinGet, Path, ProcessPath, ahk_id %this_ID%
Try
Menu, windows, Icon, %title%, %Path%,, 0
Catch
Menu, windows, Icon, %title%, %A_WinDir%\System32\SHELL32.dll, 3, 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%
}
ActivateTitle:
SetTitleMatchMode 3
WinActivate, %A_ThisMenuItem%
return
;-----------------------------------------------------------------
; Check whether the target window is activation target
;-----------------------------------------------------------------
IsWindow(hWnd){
WinGet, dwStyle, Style, ahk_id %hWnd%
if ((dwStyle&0x08000000) || !(dwStyle&0x10000000)) {
return false
}
WinGet, dwExStyle, ExStyle, ahk_id %hWnd%
if (dwExStyle & 0x00000080) {
return false
}
WinGetClass, szClass, ahk_id %hWnd%
if (szClass = "TApplication") {
return false
}
return true
}
编辑(由用户建议 Ooker ):
该脚本会弹出一个菜单供您选择。
这就是它的样子:
答案 1 :(得分:5)
您不应手动发送alt + tab,因为它是一个特殊的Windows命令,而是使用为您执行此操作的AltTab commands。
AltTabMenu
打开标签菜单并选择该计划,而AltTab
,ShiftAltTab
会浏览该计划。
h::AltTabMenu
n::AltTab
m::ShiftAltTab
答案 2 :(得分:4)
如果您只想切换回上一个应用程序,请使用发送,!{Esc}
答案 3 :(得分:4)
Windows 8/10和ctrl-alt-del和alt-tab等键存在一些问题。这是一个解决方案:
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
答案 4 :(得分:2)
我的个人目标是将Alt-Tab映射到Win-Tab(因为我在Windows 10上使用Mac键盘),所以我采用了Stepan上面写的内容以及一些文档,这里的内容对我来说很好:
#Tab::
{
Send {LAlt Down}{Tab}
KeyWait, LWin ; Wait to release left Win key
Send {LAlt Up} ; Close switcher on hotkey release
}
return
答案 5 :(得分:1)
为我工作:
F1::
Send, {ALT DOWN}{TAB}{ALT UP}
return
它模拟F1键的Alt + Tab行为。
答案 6 :(得分:0)
好吧,最后我找到了原因和一些“解决方案”here和here。 似乎Windows 8阻止了Ahk {Alt Down} {Tab}和AltTabMenu以及其他一些键。
现在我用这个向前滚动窗口:
Send !{ESC}
这将显示AltTabMenu:
Run, "C:\Users\Default\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\Window Switcher.lnk"
这可以按照其中一个主题中的建议切换到上一个应用程序:
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}
如果没有AltTabMenu飞溅,可以访问上一个应用程序。
答案 7 :(得分:0)
如果您要执行多个“制表符”,则下面的功能应该可以帮助您做到这一点。这至少是我的Windows 8.1计算机上自己的解决方案。
方法是:
下面的AutoHotKey代码示例:
; Test switch of 1 window
F1::AltTabFunction(offset:=1)
; Test switch of 2 windows
F2::AltTabFunction(offset:=2)
AltTabFunction(offset:=1)
{
; ****************************
; Function for switching windows by ALT-TAB (offset = number of windows to "tab")
; ****************************
; Get list of all windows.
WinGet, AllWinsHwnd, List
WinGetTitle, active_title, A ; Get title of active window.
; Find index of the current window.
counter_of_none_hidden_windows := 0 ; Initiate counter for counting only the none-hidden windows.
Loop, % AllWinsHwnd
{
; Find title for window in this loop.
WinGetTitle, CurrentWinTitle, % "ahk_id " AllWinsHwnd%A_Index%
; From [1]: "Retrieves an 8-digit hexadecimal number representing the extended style of a window.".
; [1] : https://autohotkey.com/docs/commands/WinGet.htm
WinGet, exStyle, exStyle, % "ahk_id" AllWinsHwnd%A_Index%
; Skip hidden windows by checking exStyle.
If !(exStyle & 0x100){
Continue
}
; Window is not hidden. Increase counter.
counter_of_none_hidden_windows := counter_of_none_hidden_windows+1
; Set flag.
titles_match := CurrentWinTitle = active_title
If (titles_match) {
window_index_to_switch_to := counter_of_none_hidden_windows+offset
break
}
}
; Find index of the window to switch to and do the actual switch
counter_of_none_hidden_windows := 0 ; Initiate counter for counting only the none-hidden windows.
Loop, % AllWinsHwnd
{
; From [1]: "Retrieves an 8-digit hexadecimal number representing the extended style of a window.".
; [1] : https://autohotkey.com/docs/commands/WinGet.htm
WinGet, exStyle, exStyle, % "ahk_id" AllWinsHwnd%A_Index%
; Skip hidden windows by checking exStyle.
If !(exStyle & 0x100){
Continue
}
; Window is not hidden. Increase counter.
counter_of_none_hidden_windows := counter_of_none_hidden_windows+1
; Set flag.
found_window_to_switch_to := counter_of_none_hidden_windows = window_index_to_switch_to
; Switch window.
If (found_window_to_switch_to) {
; Get title.
WinGetTitle, CurrentWinTitle, % "ahk_id " AllWinsHwnd%A_Index%
; Activate by title.
WinActivate, %CurrentWinTitle%
; Stop loop.
break
}
}
return ; Nothing to return
}
答案 8 :(得分:0)
send {Alt down}{tab}
send {Alt up}
答案 9 :(得分:0)
!{Tab}可在您在窗口前后添加睡眠的情况下在窗口之间切换。
答案 10 :(得分:-3)
我认为这个问题只是一个简单的请求:由于win10改变了事情,如何使用AHK在Win10中更改选项卡? ->我找到了最简单的解决方案,如下所示...代码使得在Win10 emu打开时必须按住alt键-然后再使用箭头键添加更多标签页(如果需要三个alt标签页,然后是“ alt选项卡,然后是右边2”,看到了吗?
macro key name::
{
Sleep 100
Send, ^c
Sleep 1000
Send, {alt down}{tab}
Sleep 400
Send, {right 2}{alt up}
Sleep 400
Send, ^v
Sleep 400
}
因此,只需在代码中使用此片段即可,您可以跳过打开的“下一个”窗口。 罗斯曼