Что нового

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

sterro_sasha

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

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

CreatoR

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

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

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

sterro_sasha

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

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

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 198
Репутация
2 342
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
 
Верх