Тема: AHK: Альтернатива Alt+Tab
У кого какой код на замену Alt+Tab?
Я разные пробовал, во всех бывают ситуации, когда их поведение отличается от нажатия Alt+Tab.
Win10x64 AhkSpy, Hotkey, ClockGui
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
У кого какой код на замену Alt+Tab?
Я разные пробовал, во всех бывают ситуации, когда их поведение отличается от нажатия Alt+Tab.
Для чего заменять Alt+Tab? Это сочетание клавиш мешается в каком-то конкретном AutoHotkey-скрипте?
Окно мелькает.
В идеале было бы получать предыдущее окно, и список как в Alt+Tab.
Тут же обсуждали:
http://forum.script-coding.com/viewtopic.php?id=16202
Насколько помню там нет решения. Отсюда почитай http://forum.script-coding.com/viewtopi … 28#p146928
А чем это не устраивает?
Окно AltTab можно перекрыть снимком экрана.
Либо пробуй отследить его хуком и двигать за экран.
Ну ты же сам знаешь, что это ломаный костыль.
Если уже ты такое предлагаешь, то тему можно смело закрывать, с грифом - доступ к "окнам Alt+Tab невозможен".
Окно мелькает.
В смысле имеет место какой-то сбой или проблема? Или просто не нравится табличка, вылезающая поверх всех окон при нажатии Alt+Tab ?
Если уже ты такое предлагаешь, то тему можно смело закрывать, с грифом - доступ к "окнам Alt+Tab невозможен".
Можешь поиграться.
https://answers.microsoft.com/en-us/ins … c82dc0ecce
Можешь поиграться.
Этот контент для взрослых, я ещё не подрос.
Нужно просто попробовать.
Например, Grid_leftmargin устанавливаешь за экран - окно открывается за экраном.
Нужно просто попробовать.
Я даже не понял о чём ты, ты про
Окно AltTab можно перекрыть снимком экрана.
но это уже совсем другая тема.
Тут осталось 2.5 человека, хотелось узнать авторитетное мнение от всех, в стиле - нет, мы все не знаем как это возможно сделать, но наверняка это возможно, но мы просто не знаем как. )
Создаешь в реестре ключ:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MultitaskingView\AltTabViewhost]
В нем создаешь dword "Grid_leftmargin" со значением ширины экрана.
В результате при нажатии alt-tab окно появляется за экраном.
Информацию с него считываешь с помощью uia.
Информацию с него считываешь с помощью uia.
А какая там информация, заголовки?
В результате при нажатии alt-tab окно появляется за экраном.
А если ручками нажать alt-tab, куда смотреть...
А какая там информация, заголовки?
Да.
А если ручками нажать alt-tab, куда смотреть...
Перед появлением окна меняешь значение в реестре.
Ясно, в общем API у AltTab не существует.
serzh82saratov
Здравствуйте!
Хотелось бы знать о чём вы пишите, любопытство.
Можете привести пример, в котором бы окно мелькало?
Можете привести пример, в котором бы окно мелькало?
1:: SendInput {LAlt Down}{Tab}{LAlt Up}
serzh82saratov
У меня нет никаких мельканий.
У вас какая операционная система стоит?
У меня Windows 11.
Так же есть возможность использовать Alt+Shift+Esc (->) и Alt+Esc(<-), пробовали?
У меня Windows 10. Alt+Esc переключает окна по порядку, а надо только предыдущие.
Если вы имеете ввиду чередовать Alt+Shift+Esc и Alt+Esс, то это может быть выходом, спасибо.
На первый взгляд отлично работает. Косяк только с тем что при первом использовании нужен Alt+Tab, но это мелочи, по сравнению с тем что имеем.
1:: AltTab()
AltTab() {
Static i
If (i = "") && (1, i := 0)
SendInput {LAlt Down}{Tab}{LAlt Up}
Else
SendInput % (i := !i) ? "{LAlt Down}{Escape}{LAlt Up}" : "{LShift Down}{LAlt Down}{Escape}{LShift Up}{LAlt Up}"
}
Рано обрадовался, нажатие Alt+Tab ломает логику. (
Опытным путём выяснил, что при каждом нажатии Alt+Tab создаётся окно class #32771 с новым HWND. Следовательно окно "одноразовое", существует только пока мы держим Alt+Tab.
Действительно для Windows 7 Pro x64 упрощённый стиль.
Ясно, в общем API у AltTab не существует.
А зачем апи, когда через реестр ты можешь модифицировать окно как хочешь.
serzh82saratov пишет:Ясно, в общем API у AltTab не существует.
А зачем апи, когда через реестр ты можешь модифицировать окно как хочешь.
То что надо сбрасывать значение перед физическим нажатием, как то не комильфо.
Кстати реестр меняется в оперативке, или все изменения пишутся сразу на диск?
На диск.
Если посмотреть, сколько и в каких объемах ежесекундно пишется на диск, то всё это мелочи.
Ну например скрипт крашится, и пользователь после нажимает Alt+Tab, он не поймёт что происходит.
Можно делать так, что после каждого нажатия
1:: SendInput {LAlt Down}{Tab}{LAlt Up}
данные в реестре стираются.
Хотя, с чего это должен скрипт крашиться...
Самое интересное, что если отвечать на твой вопрос
У кого какой код на замену Alt+Tab?
то я вообще не пользуюсь данным переключением - тыкаю мышкой в нужные мне окна.
тыкаю мышкой в нужные мне окна
Мне часто нужно предыдущее окно, мышкой тыкать отвлекает, а если окно находится в сгруппированных, то совсем плохо.
после каждого нажатия
И перед нажатием тоже надо изменить, на каждый такой тык 2 раза в реестр лезть.
serzh82saratov
А зачем нужен первоначальный альт+таб? У меня лично вот так работает.
1:: AltTab()
AltTab() {
Static i
SendInput % (i := !i) ? "{LAlt Down}{Escape}{LAlt Up}" : "{LShift Down}{LAlt Down}{Escape}{LShift Up}{LAlt Up}"
}
Да и если такие уж проблемы, не проще ли создать тогда свой Alt+Tab?
Пусть запоминает последнее открытое окно и если фокус перешёл на нового окно, то при нажатие клавиши, оно возвращает на прошлое окно?
Тогда не нужен вообще никакой Alt+Tab.
И перед нажатием тоже надо изменить, на каждый такой тык 2 раза в реестр лезть.
Ты так говоришь, будто в этом есть что-то ужасное.
https://superuser.com/questions/1711732 … -timespans
Убедил.
Всё же любопытно откуда эти окна AltTab берёт.
К примеру EnumWindows если ещё чутка отсеять в ней, выводит окна в нужном порядке, но проблема что перед ними выводит все TOPMOST окна.
SetFormat, IntegerFast, H
EnumWindowsProcStub:= RegisterCallback("EnumWindowsProc","Fast")
OnExit Exit
global out
DllCall("EnumWindows", "UInt", EnumWindowsProcStub, "UInt", 0)
msgbox, % Clipboard := out
return
EnumWindowsProc(hwnd, lParam) {
If !DllCall("IsWindowVisible", "Ptr", HWND)
return 1
If DllCall("GetAncestor", "Ptr", hwnd, Uint, 3) != hwnd
return 1
WinGetTitle, text, ahk_id %hwnd%
WinGetClass, class, ahk_id %hwnd%
out.="HWND: " . hwnd . "`tlParam: " . lParam . "`tTitle: " . text . "`tClass: " . class . "`n"
return 1
}
Exit:
DllCall("GlobalFree", "UInt", EnumWindowsProcStub)
ExitApp
У меня лично вот так работает.
Не так переключает, если саму активировать.
Пусть запоминает последнее открытое окно
Там много ещё нюансов, хотелось бы без них как нибудь.
Всё же любопытно откуда эти окна AltTab берёт.
Наверное стоит хук на создание-активирование окон.
Ты тоже можешь написать dll, которая будет отслеживать.
Ты тоже можешь написать dll
А DLL зачем, чем SetWinEventHook не подходит?
Да, dll тут не нужна.
Наверное стоит хук на создание-активирование окон.
Это надо все окна сохранять, при перезапуске все пропадут, в файл писать как то не хочется.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться