sterro_sasha
Новичок
- Сообщения
- 45
- Репутация
- 1
Здравствуйте ребята! Очень прошу, подскажите пожалуйста, как можно это исправить, если вообще возможно.
В браузере Chrome или Яндекс переключение на следующую вкладку происходит путем комбинации клавиш Ctrl + TAB. В скрипте задал горячие кнопки Ctrl + Shift + 1, после чего скрипт отправляет в браузер Ctrl + TAB и вкладка переключается. Но часто с пятой попытки или больше - после переключения клавиша Shift или Ctrl не "отпускается". В итоге например прокручиваю колесом страницу, но вместо прокрутки меняется масштаб, пока вручную не нажму один раз Ctrl или Shift.
Как можно это исправить? Пробовал уже многое - блокировка ввода на момент работы Send (как встроенную функцию в Autoit так и UDF от Creater). Также пробовал задавать горячие кнопки при помощи UDF от Yashied, использовать вместо Send - ControlSend:
Все без результата. При использовании ControlSend переключение вкладок происходит 1-3 раза, после почему-то функция не работает. Можно также ожидать пока будут "отжаты" Ctrl/Shift/Alt при помощи _IsPressed, но это не совсем то что нужно.
Руки опустились, кажется это исправить нельзя.
Привожу пример. Если запустить и зажать Ctrl + Shift + 1 - вкладка переключается, но рано или поздно Ctrl или Shift начинают оставаться в зажатом состоянии.
Очень важный момент - мне важна работа именно по следующему сценарию: зажимаем Ctrl + Shift и далее нажатием кнопки 1 переключаем вкладки не отжимая Ctrl + Shift. Так просто удобнее и быстрее, чем постоянно отпускать и заново зажимать Ctrl + Shift + 1 (именно так и реализовано в браузерах). Если постоянно отпускать - тогда можно использовать:
Но это очень неудобно, если нужно быстро переключить несколько вкладок.
Подскажите пожалуйста, может есть у кого-то идеи как это можно исправить? Буду очень признателен!
Пример кода:
Еще скажу - дело не в комбинации клавиш браузера. Если пробовать при помощи горячих кнопок Ctrl + Shift + 1 писать текст через Send, например в блокнот, то также с некого раза Ctrl или Shift начинает "не отжиматься".
UPDATE.
На англоязычном форуме отлично описана проблема (https://www.autoitscript.com/forum/topic/126082-ctrl-shift-alt-getting-stuck-down-with-send/):
"Насколько я понимаю, проблема возникает, когда ctrl, shift или alt удерживаются нажатыми при вызове Send (), и если клавиша отпущена до завершения функции отправки, то эта клавиша "застрянет", и для ее освобождения потребуется физическое нажатие клавиши."
Собственно скорее всего проблема именно в этом. Конфликт HotKeySet и Send, когда в HotKeySet присутствуют Ctrl / Shift, и при их "зажатии" - они остаются зажатыми при запуске Send.
Много искал, темы на этом форуме, на англоязычном и пока никакого решения. _SendEx из справки это не решение, так как изменяет в принципе логику работы HotKeySet.
В браузере Chrome или Яндекс переключение на следующую вкладку происходит путем комбинации клавиш Ctrl + TAB. В скрипте задал горячие кнопки Ctrl + Shift + 1, после чего скрипт отправляет в браузер Ctrl + TAB и вкладка переключается. Но часто с пятой попытки или больше - после переключения клавиша Shift или Ctrl не "отпускается". В итоге например прокручиваю колесом страницу, но вместо прокрутки меняется масштаб, пока вручную не нажму один раз Ctrl или Shift.
Как можно это исправить? Пробовал уже многое - блокировка ввода на момент работы Send (как встроенную функцию в Autoit так и UDF от Creater). Также пробовал задавать горячие кнопки при помощи UDF от Yashied, использовать вместо Send - ControlSend:
Код:
ControlSend('[ACTIVE]', '', '', '^{TAB}', 0)
Все без результата. При использовании ControlSend переключение вкладок происходит 1-3 раза, после почему-то функция не работает. Можно также ожидать пока будут "отжаты" Ctrl/Shift/Alt при помощи _IsPressed, но это не совсем то что нужно.
Руки опустились, кажется это исправить нельзя.
Привожу пример. Если запустить и зажать Ctrl + Shift + 1 - вкладка переключается, но рано или поздно Ctrl или Shift начинают оставаться в зажатом состоянии.
Очень важный момент - мне важна работа именно по следующему сценарию: зажимаем Ctrl + Shift и далее нажатием кнопки 1 переключаем вкладки не отжимая Ctrl + Shift. Так просто удобнее и быстрее, чем постоянно отпускать и заново зажимать Ctrl + Shift + 1 (именно так и реализовано в браузерах). Если постоянно отпускать - тогда можно использовать:
Код:
_WinAPI_Keybd_Event(0x11, 0x02) ;отжать Ctrl
_WinAPI_Keybd_Event(0xA0, 0x02) ;отжать Shift
Но это очень неудобно, если нужно быстро переключить несколько вкладок.
Подскажите пожалуйста, может есть у кого-то идеи как это можно исправить? Буду очень признателен!
Пример кода:
Код:
#include <WinAPISys.au3>
;по нажатию Ctrl + Shift + 1 вкладка переключается (неважно Chrome или Яндекс браузер)
HotKeySet('^+1', '_Test')
;просто зажмите на пару секунд кнопки Ctrl + Shift + 1 (в Chrome или Яндекс браузер) и подождите завершение, после чего скорее всего Shift или Ctrl останется в зажатом состоянии
Func _Test()
;комбинация клавиш используется для переключения на следующую вкладку
_FixAccelHotKeyLayout()
Send('^{TAB}')
EndFunc ;==>_Test
While Sleep(1000)
WEnd
;исправление проблем отправки данных (Send) из-за неправильной раскладки
Func _FixAccelHotKeyLayout()
Static $iKbrdLayout, $aKbrdLayouts
If Execute('@exitMethod') <> '' Then
Local $iUnLoad = 1
For $i = 1 To UBound($aKbrdLayouts) - 1
If Hex($iKbrdLayout) = Hex('0x' & StringRight($aKbrdLayouts[$i], 4)) Then
$iUnLoad = 0
ExitLoop
EndIf
Next
If $iUnLoad Then
_WinAPI_UnloadKeyboardLayout($iKbrdLayout)
EndIf
Return
EndIf
$iKbrdLayout = 0x0409
$aKbrdLayouts = _WinAPI_GetKeyboardLayoutList()
_WinAPI_LoadKeyboardLayout($iKbrdLayout, $KLF_ACTIVATE)
OnAutoItExitRegister('_FixAccelHotKeyLayout')
EndFunc ;==>_FixAccelHotKeyLayout
Еще скажу - дело не в комбинации клавиш браузера. Если пробовать при помощи горячих кнопок Ctrl + Shift + 1 писать текст через Send, например в блокнот, то также с некого раза Ctrl или Shift начинает "не отжиматься".
UPDATE.
На англоязычном форуме отлично описана проблема (https://www.autoitscript.com/forum/topic/126082-ctrl-shift-alt-getting-stuck-down-with-send/):
"Насколько я понимаю, проблема возникает, когда ctrl, shift или alt удерживаются нажатыми при вызове Send (), и если клавиша отпущена до завершения функции отправки, то эта клавиша "застрянет", и для ее освобождения потребуется физическое нажатие клавиши."
Собственно скорее всего проблема именно в этом. Конфликт HotKeySet и Send, когда в HotKeySet присутствуют Ctrl / Shift, и при их "зажатии" - они остаются зажатыми при запуске Send.
Много искал, темы на этом форуме, на англоязычном и пока никакого решения. _SendEx из справки это не решение, так как изменяет в принципе логику работы HotKeySet.
Последнее редактирование: