Что нового

Обход проблемы с Send/HotKeySet/Accelerators при разных раскладках клавиатуры

sterro_sasha

Новичок
Сообщения
44
Репутация
1
Re: Обход проблемы с HotKeySet/Accelerators при разных раскладках клавиатуры

Функция хорошая. Нельзя ли как-то сделать поддержку не только.. HotKeySet, но и Send?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: Обход проблемы с HotKeySet/Accelerators при разных раскладках клавиатуры

sterro_sasha [?]
Нельзя ли как-то сделать поддержку не только.. HotKeySet, но и Send?
Так уже работает.

Код:
_FixAccelHotKeyLayout()
Send('^v')
 

sterro_sasha

Новичок
Сообщения
44
Репутация
1
Re: Обход проблемы с HotKeySet/Accelerators при разных раскладках клавиатуры

CreatoR сказал(а):
sterro_sasha [?]Так уже работает.

Код:
_FixAccelHotKeyLayout()
Send('^v')

К сожалению не работает. Или _FixAccelHotKeyLayout нужно вызывать непосредственно перед Send? С HotKey - работает. А при использовании Send - при русской раскладке пишется буква v.. а не вставка из буфера((
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
sterro_sasha [?]
Или _FixAccelHotKeyLayout нужно вызывать непосредственно перед Send?
Я кажется именно так и показал, а вы как то иначе пробовали? Тогда вам никто помочь не может.
 

Vivious

Новичок
Сообщения
1
Репутация
0
Почему-то некорректно отрабатывалось решение CreatoR: язык менялся, но вместо Ctrl+V отправлялось 'v'.
Предлагаю довольно примитивное решение, отлично работающее в моих условиях (запускаю скрипт вручную). Проверяет раскладку и, если она не английская, меняет её и перезагружается. Работает только с EXE, но, думаю, можно и поддержку au3 прикрутить.
Код:
Func _FixAccelHotKeyLayout()
    If @KBLayout <> 409 Then
        _WinAPI_SetKeyboardLayout(WinGetHandle('[ACTIVE]'), 0x0409)
        Run(@ScriptFullPath)
        Exit
    EndIf
EndFunc

При необходимости можно обратно включать предыдущую раскладку (не тестировалось)
Код:
Func _FixAccelHotKeyLayout()
    If @KBLayout <> 409 Then
        Local $iPrevLayout = @KBLayout
        _WinAPI_SetKeyboardLayout(WinGetHandle('[ACTIVE]'), 0x0409)
        Run(@ScriptFullPath)
        Sleep(500)
        _WinAPI_SetKeyboardLayout(WinGetHandle('[ACTIVE]'), '0x' & $iPrevLayout)
        Exit
    EndIf
EndFunc
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Известно что при использований HotKeySet или GUISetAccelerators, нужно полагаться на текущую раскладку клавиатуры, т.е если мы к примеру задаём HotKeySet("^!s", "_Func"), то работать оно будет только если перед запуском скрипта раскладка клавиатуры по умолчанию была английская.
Как случилось, что об этом "известно", да ещё и с таких незапамятных времён, а в справке по этим функциям до сих пор это никак не упоминается?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
в справке по этим функциям до сих пор это никак не упоминается?
Потому что разработчики не считают это проблемой, для них это поведение системы и соответственно "не их проблема".
 

Oki

Продвинутый
Сообщения
452
Репутация
62
Потому что разработчики не считают это проблемой, для них это поведение системы и соответственно "не их проблема".
Мне такое зарывание головы в песок кажется странным. Во-первых, обычно программы корректно взаимодействуют с системой и сваливать всё на другую сторону несколько неправильно, как мне кажется. Во-вторых, даже если некий формализм позволяет вот так прикрываться, всё же справка обычно существует для информирования её пользователей, а не просто для формальной отписки в стиле "мы тут формально правы, а вы плавайте, как хотите". На родном языке создателей языка AutoIt это, как мне кажется, описывается идиомой с дословным переводом "маленькая голова". Как мне показалось при чтении других страниц справки, её авторы всё же стремятся донести до читателей требуемую информацию, а в этом случае подобные ожидания нарушаются. Если что, не хотелось никого обидеть, не прошу меня понять неправильно.
 
Верх