Что нового

Временно переключать на англоязычную раскладку

seriousstas

Новичок
Сообщения
32
Репутация
0
Читаю доки :
; Эмуляция нажатия комбинации клавиш Win + R
; Send("#r")
Send("#к") ; если русский язык по умолчанию при загрузке OS, то вместо "#r" нужно "#к", либо в скрипте временно переключать на англоязычную раскладку.
Подскажите, как это правильно сделать ?
Нашел такой вариант :
Код:
_WinAPI_LoadKeyboardLayout(0x0409) 
Func _WinAPI_LoadKeyboardLayout($sLayoutID, $hWnd = 0) 
    Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50 
    Local $aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", Hex($sLayoutID, 8), "int", 0) 
     
    If Not @error And $aRet[0] Then 
        If $hWnd = 0 Then 
            $hWnd = WinGetHandle(AutoItWinGetTitle()) 
        EndIf 
         
        DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $aRet[0]) 
        Return 1 
    EndIf 
     
    Return SetError(1) 
EndFunc

Но он тормозит работу скрипта ..
 
Автор
S

seriousstas

Новичок
Сообщения
32
Репутация
0
Alofa
А можно простой пример для Send ?
Код:
Send("#r")

без "ускорителей")


У AutoHotkey-ев кстати есть простое сообщение :
Код:
SendMessage, 0x50,, 0x4090409,, A
И это работает ..
Может и здесь можно применить ?


Добавлено:
Сообщение автоматически объединено:
 
A

Alofa

Гость
seriousstas сказал(а):
А можно простой пример для Send ?..
Код:
#include <WinAPIEx.au3>

_FixAccelHotKeyLayout()

Send("#r")

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)
        Return
    EndIf
    $iKbrdLayout = 0x0409
    $aKbrdLayouts = _WinAPI_GetKeyboardLayoutList()
    _WinAPI_LoadKeyboardLayout($iKbrdLayout, $KLF_ACTIVATE)
    OnAutoItExitRegister('_FixAccelHotKeyLayout')
EndFunc
 
Верх