Что нового

принудительная отправка корректных английских букв в окно _WinAPI_SetKeyboardLay

RockMan

Новичок
Сообщения
67
Репутация
0
Код:
$DIR = "C:\ProgramData"
$hCtrl = WinGetHandle("MyWindow")
_WinAPI_SetKeyboardLayout($hCtrl, 0x0409)
ControlSend("MyWindow", "", $hCtrl, $DIR)


написал вот такой скриптик и в моей программе оно вставляется вот таким образом - CPr6\ogramData - это если раскладка на русском, если на английском всё ок, подскажите как принудительно отправить туда при любой раскладке русские буквы

я пытался отправлять туда буквы через ASC +код - результат чуть лучще но вместо : на русском ставит цифру 6
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
Func _WinAPI_LoadKeyboardLayoutEx($sLayoutID = 0x0409, $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   ;==>_WinAPI_LoadKeyboardLayoutEx
 
Автор
R

RockMan

Новичок
Сообщения
67
Репутация
0
делаю вот так, язык меняется на английский, но если изначально язык был английский - всё ок, если был русский и меняется на английский то вместо двоеточия вводится то стрелка вверх то шестерка если там есть еще символы

Код:
Func _WinAPI_LoadKeyboardLayoutEx($sLayoutID = 0x0409, $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   ;==>_WinAPI_LoadKeyboardLayoutEx


$hBrowser = WinGetHandle("мое окно")


 _WinAPI_LoadKeyboardLayoutEx(0x0409, $hBrowser)


ControlSend("мое окно", "", $hBrowser, "{:}")
 
Верх