Ремап win+1, 2, 3... переключение между окнами Topic is solved

Помощь в написании скриптов
User avatar
RainRa
Posts: 8
Joined: 04 Mar 2021, 03:59
Contact:

Ремап win+1, 2, 3... переключение между окнами  Topic is solved

04 Mar 2021, 04:29

Пытаюсь реализовать скрипт копирующий поведение win+1 — выбирает приложение на панели задач внизу, если удерживать win и повторно нажимать, то можно переключаться между окнами приложения, что весьма удобно.
Я пытаюсь сделать на Lalt & S. Код ниже небрежный, но кое-как работает, но нет режима последовательно переключения по окнам при повторном нажатии S — как это реализовано в AltTab.
Если есть идеи или решения буду признателен :thumbup:

Code: Select all

Lalt & s::
Send {LWin Down}1
Sleep 300
While GetKeyState("LWin","P")
{
KeyWait, q, D T0.4
If !ErrorLevel ; if you do press q
   {
   Send {Blind}1
   Sleep 300
   }
}
Send {LWin up}
return
Я заметил, что для альт таб не так просто написать такой сценарий. Но в интернете есть решения, а по win+1 решений не нашел.
Вообще хотел бы отказаться от alt+tab в работе — случается путаница, например намного проще вызывать опера win+2 и так же через win+2 свернуть ее и фокус будет на предыдущее приложение. Только как это все грамотно переназначить.


Может кому пригодится — сценарий для запуска хрома, если он не запущен и переключения на него если запущен.
Spoiler
Last edited by RainRa on 04 Mar 2021, 11:13, edited 1 time in total.
User avatar
RainRa
Posts: 8
Joined: 04 Mar 2021, 03:59
Contact:

Re: Ремап win+1, 2, 3... переключение между окнами

04 Mar 2021, 11:12

Нажал подтвердить решение случайно — как отменить не знаю.
На самом деле пол дня искал как сделать такое переключение, читал спецификации.
mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Ремап win+1, 2, 3... переключение между окнами

04 Mar 2021, 21:16

Code: Select all

LAlt & SC01F::
	If (GetKeyState("LWin") == 0)
		Send {LWin Down}
	Send 1
	Return

~LAlt Up::
	Send {LWin Up}
	Return
Клавишу S заменил скан-кодом, т.к. иначе в программах срабатывал вызов меню (например Search в Notepad++).
github://oGDIp - GDI+ wrapper for AHK v1.1
User avatar
RainRa
Posts: 8
Joined: 04 Mar 2021, 03:59
Contact:

Re: Ремап win+1, 2, 3... переключение между окнами

04 Mar 2021, 21:38

mcl wrote:
04 Mar 2021, 21:16

Code: Select all

LAlt & SC01F::
	If (GetKeyState("LWin") == 0)
		Send {LWin Down}
	Send 1
	Return

~LAlt Up::
	Send {LWin Up}
	Return
Клавишу S заменил скан-кодом, т.к. иначе в программах срабатывал вызов меню (например Search в Notepad++).
Интересно, что меню начинает работать с этим скриптом, но не на повторное нажатие S, а на 1. Может стоит попробовать поставить условие "если работает alt+'number' меню, то s это 1.
И самая главная проблема — что не происходит LWin Up. Клавиша остается зажатой.
mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Ремап win+1, 2, 3... переключение между окнами

05 Mar 2021, 02:14

RainRa wrote: Интересно, что меню начинает работать с этим скриптом, но не на повторное нажатие S, а на 1. Может стоит попробовать поставить условие "если работает alt+'number' меню, то s это 1.
И самая главная проблема — что не происходит LWin Up. Клавиша остается зажатой.
Проверял на Win7 SP1 x64 и Win8.1.

Можно попробовать ввести переменную, а не смотреть на состояние LWin.
Все трейтипы показываются? Что пишут в KeyHistory?

Code: Select all

#MenuMaskKey vkFF

LAlt & SC01F::
	If (isRepeatWin1 != True)
		Send {LWin Down}
	Send 1
	TrayTip,, % "DEBUG:" (isRepeatWin1 != True) ? 1 : 2
	isRepeatWin1 := True
	Return

~LAlt Up::
	Send {LWin Up}
	isRepeatWin1 := False
	TrayTip,, DEBUG: LWin Off
	Return
github://oGDIp - GDI+ wrapper for AHK v1.1
User avatar
RainRa
Posts: 8
Joined: 04 Mar 2021, 03:59
Contact:

Re: Ремап win+1, 2, 3... переключение между окнами

05 Mar 2021, 03:51

mcl wrote:Все трейтипы показываются? Что пишут в KeyHistory?
Винда 10 1909

Меня трейтип не уведомляет ни чем.
С последним кодом KeyHistory при нажатии Lalt+s:
001: SetCapslockState,AlwaysOff
004: Return (25.28)
076: if (isRepeatWin1 != True)
077: Send,{LWin Down} (0.02)
078: Send,1 (0.01)
079: TrayTip,,"DEBUG:" (isRepeatWin1 != True) ? 1 : 2
080: isRepeatWin1 := True
081: Return (6.09)

И он отключает скрипт-переводчик на F1, на F1 снова подсказка.
Spoiler
mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Ремап win+1, 2, 3... переключение между окнами

05 Mar 2021, 05:36

RainRa wrote: Меня трейтип не уведомляет ни чем.
Странно, ведь команда выполняется (079).
KeyHistory − список нажатых клавиш (реально или через Send) − Ctrl+K в главном окне AHK.
KeyHistory
RainRa wrote: И он отключает скрипт-переводчик на F1, на F1 снова подсказка.
Добавил свой скрипт к вашему, запустил − он поругался на отсутствующие eval, но и F1, и переключение по Alt+S сработали.

У меня, увы, нет возможности проверить на Win10, пока оставил сообщение в другой вашей теме.
Lexicos (автор AHK) пишет, что разницы в работе между Win7/Win10 быть не должно.

Есть ещё несколько идей, если и они не сработают − расписываюсь в своей полной бесполезности:
1. Запуск скрипта от имени администратора (или наоборот).
2. В некоторых случаях помогает задержка между Send'ами.
github://oGDIp - GDI+ wrapper for AHK v1.1
User avatar
RainRa
Posts: 8
Joined: 04 Mar 2021, 03:59
Contact:

Re: Ремап win+1, 2, 3... переключение между окнами

05 Mar 2021, 07:15

mcl wrote: У меня, увы, нет возможности проверить на Win10, пока оставил сообщение в другой вашей теме.
Lexicos (автор AHK) пишет, что разницы в работе между Win7/Win10 быть не должно.

Есть ещё несколько идей, если и они не сработают − расписываюсь в своей полной бесполезности:
1. Запуск скрипта от имени администратора (или наоборот).
2. В некоторых случаях помогает задержка между Send'ами.
Спасибо за продвижение процесса. Я считаю, что вы больше всех помогли :) а я написал еще и на реддит. Если это у кого-то работает, то выход должен быть. Возможно что-то с чем-то конфликтует.
Проверю ваши идеи.

Code: Select all

01  000	 	u	0.11	LButton        	
A4  038	 	d	1.61	LAlt           	
53  01F	h	d	0.22	s              	
5B  15B	i	d	0.00	LWin           	
FF  000	i	d	0.01	not found      	
FF  000	i	u	0.00	not found      	
A4  038	i	u	0.00	LAlt           	
31  002	i	d	0.00	1              	
31  002	i	u	0.00	1              	
FF  000	i	d	0.02	not found      	
A4  038	i	d	0.00	LAlt           	
FF  000	i	u	0.00	not found      	
53  01F	s	u	0.11	s              	
53  01F	#	d	0.33	s              	
53  01F	 	u	0.08	s              	
A4  038	#	u	0.41	LAlt   	
Alt все еще залипает
mcl
Posts: 357
Joined: 04 May 2018, 16:35

Re: Ремап win+1, 2, 3... переключение между окнами

05 Mar 2021, 19:17

В вашей KeyHistory последние нажатия s и LAlt Up отмечены #, т.е. они блокируются какой-то #If-директивой.
После первого нажатия фокус уходит на таскбар, и, если у вас действительно эти кнопки под #IfWinActive − ни последующие нажатия, ни отпускание LAlt не сработают.
github://oGDIp - GDI+ wrapper for AHK v1.1
User avatar
RainRa
Posts: 8
Joined: 04 Mar 2021, 03:59
Contact:

Re: Ремап win+1, 2, 3... переключение между окнами

06 Mar 2021, 00:03

mcl wrote: В вашей KeyHistory последние нажатия s и LAlt Up отмечены #, т.е. они блокируются какой-то #If-директивой.
После первого нажатия фокус уходит на таскбар, и, если у вас действительно эти кнопки под #IfWinActive − ни последующие нажатия, ни отпускание LAlt не сработают.
Ураа! Все работает. :bravo: спасибо.
Действительно, код был под #IfWinActive и поэтому не работало все :crazy:

Return to “Помощь”

Who is online

Users browsing this forum: No registered users and 51 guests