Что нового

[Мышь, клавиатура] Отправить Send с определенной раскладкой

forc1k

Новичок
Сообщения
42
Репутация
1
Здравствуйте. Как можно отправить команду
Код:
Send("^u")
с определенной раскладкой, скажем английской? Чего уже только не пробовал, приложение не реагирует..
Весь код ниже.
 
Автор
F

forc1k

Новичок
Сообщения
42
Репутация
1
Я уже делал так, только немного другими средствами, но вот в чем проблема... опишу ситуацию.
Скрипт делает
Код:
$HTML = _INetGetSource('вебадрес')
$StrMidLog = StringMid($HTML, 144, 16)
$StrMidPass = StringMid($HTML, 193, 10)

Он считывает именно нужные английские символы. Затем он открывает приложение, использует хоткей(^u) и производит ввод
Код:
Send($StrMidLog)
, но буквы вводятся на русском и не могу понять почему. Можете помочь?

upd:
Language.au3
Код:
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>





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


Main.au3
Код:
#include <INet.au3>
#include <Language.au3>
_WinAPI_LoadKeyboardLayoutEx(0x0409)
$HTML = _INetGetSource('http://')
$StrMidLog = StringMid($HTML, 144, 16)
$StrMidPass = StringMid($HTML, 193, 10)

Run("notepad.exe", "", @SW_SHOWMAXIMIZED)

While 1


	If WinWaitActive("Безым", "") Then
		;BlockInput(1)
		Send("^u")
	If Not @error Then
	ExitLoop
	EndIf
	EndIf
WEnd

While 1
	If WinWaitActive("Безым") Then
		Send($StrMidLog)
	If Not @error Then
		Send("{TAB}")
	If Not @error Then
		Send($StrMidPass)
	If Not @error Then
		Send("{ENTER}")
		;BlockInput(0)
	ExitLoop
	EndIf
	EndIf
	EndIf
	EndIf

WEnd



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

Никто не сталкивался с подобным? Может можно по-другому реализовать? Главное, чтобы отрабатывал как нужно.

UPDATE: Все решилось добавлением еще одной функции с переключением на русский язык
Код:
Func _WinAPI_LoadKeyboardLayoutExe($sLayoutID = 0x0419, $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_LoadKeyboardLayoutExe(0x0419)
 
Верх