sproxy
Full Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Zwook 00:28 05-04-2009 Цитата: Подскажите пожалуйста, есть ли в Autoit команда подобная _WinAPI_DrawLine которая рисовала бы Параболу по заданным параметрам. | Код: + если есть желание / необходимость - можно и WinAPI-ую использовать в AutoIt. Обращение к внешним библиотекам: Код: Добавлено: Цитата: использую с руской раскладкой клавиатуры и в тексте 1.txt содержится английский текст, то он выводится русскими буквами т.е. qwerty превращается в йцукен. Если же поставить английскую расскладку, то текст вообще не печатается. Самое интересное то, что для русского текста все с точностью да наоборот, с русской расскладкой не пишет, а с английской пишет, но не то, что нужно.... | Все верно, т.к. используется ControlSend. Он высылает текст подобно функции Send (только в конкретный элемент), а точнее - происходит эмуляция клавиатурных нажатий. Т.е. как буд-то текст $line ввел пользователь. Попробуйте использовать ControlSetText, текст будет вставлен как есть. Но если необходим все же ControlSend, то перед вводом текста необходимо переключить раскладку клавиатуры на нужный язык. Добавлено: Zwook 00:28 05-04-2009 Цитата: использую с руской раскладкой клавиатуры и в тексте 1.txt содержится английский текст, то он выводится русскими буквами т.е. qwerty превращается в йцукен. Если же поставить английскую расскладку, то текст вообще не печатается. Самое интересное то, что для русского текста все с точностью да наоборот, с русской расскладкой не пишет, а с английской пишет, но не то, что нужно.... | пример: Код: #region: - Option Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) Opt('WinTitleMatchMode', 2) #endregion HotKeySet('{ESC}', '_Pro_Exit') MsgBox(64, 'Пример вставка текста', 'Пример № 1' & @CRLF & 'Вставка текста функцией ControlSend') _ReadFileAndPutProgram('c:\test.txt', 'notepad.exe', '[CLASS:Edit; INSTANCE:1]', 0) MsgBox(64, 'Пример вставка текста', 'Пример № 2' & @CRLF & 'Вставка текста функцией ControlSetText') _ReadFileAndPutProgram('c:\test.txt', 'notepad.exe', '[CLASS:Edit; INSTANCE:1]') Func _ReadFileAndPutProgram($sFilePath, $sProgramPath, $sProgramControlId, $fSetText=1) Local $hFile = FileOpen($sFilePath, 0) If $hFile == -1 Then Return MsgBox(48, 'Внимание', 'Ошибка открытия файла' & @CRLF & 'Код ошибки: ' & $hFile) Local $sLine, $sLineText, $iPid, $hHwd Local $fSendKeyDelay = Opt('SendKeyDelay') Opt('SendKeyDelay', 1) $iPid = Run('notepad.exe') While 1 $hHwd = _ProcessGetWindow($iPid) If IsHWnd($hHwd) Then ExitLoop WEnd WinWait($hHwd) While 1 $sLine = FileReadLine($hFile) If @error == -1 Then ExitLoop If StringIsASCII($sLine) Then _ChLang('en', $hHwd) Else _ChLang('ru', $hHwd) EndIf If $fSetText Then $sLineText &= $sLine & @CRLF Else ControlSend($hHwd, '', $sProgramControlId, $sLine & @CR, 1) EndIf Wend If $fSetText Then ControlSetText($hHwd, '', $sProgramControlId, StringTrimRight($sLineText, 2)) Else ControlSend($hHwd, '', $sProgramControlId, $sLine & @CR, 1) EndIf ControlSend($hHwd, '', $sProgramControlId, '{BACKSPACE}') FileClose($hFile) If $fSendKeyDelay == 0 Then Opt('SendKeyDelay', 0) EndFunc Func _Pro_Exit() Exit EndFunc Func _ProcessGetWindow($iPID, $iRet=1) Local $aWinList = WinList() Local $aRet[2] If IsString($iPID) Then $iPID = ProcessExists($iPID) For $i = 1 To UBound($aWinList)-1 If WinGetProcess($aWinList[$i][1]) = $iPID Then $aRet[0] = $aWinList[$i][0] ;Title $aRet[1] = $aWinList[$i][1] ;WinHandle If $iRet = 0 Then Return $aRet[0] If $iRet = 1 Then Return $aRet[1] Return $aRet EndIf Next Return SetError(1, 0, $aRet) EndFunc Func _ChengeWinLang() Local $hWnd $hWnd = WinGetHandle('[Active]') Switch _GetKeyboardLayout($hWnd) Case 'ru' _ChLang('en', $hWnd) Case 'en' _ChLang('ru', $hWnd) EndSwitch EndFunc Func _ChLang($iLangCode, $hWnd) If $iLangCode == 'ru' Then _SetKeyboardLayout('00000419', $hWnd) If $iLangCode == 'en' Then _SetKeyboardLayout('00000409', $hWnd) EndFunc Func _GetKeyboardLayout($hWnd) Local $iLangCode Local $aRet = DllCall('user32.dll', 'long', 'GetWindowThreadProcessId', 'hwnd', $hWnd, 'ptr', 0) $aRet = DllCall('user32.dll', 'long', 'GetKeyboardLayout', 'long', $aRet[0]) $iLangCode = Hex($aRet[0], 4) Switch $iLangCode Case '0409' return 'en' Case '0419' return 'ru' EndSwitch EndFunc Func _SetKeyboardLayout($sLayoutID, $hWnd) Local $WM_INPUTLANGCHANGEREQUEST = 0x50 Local $ret = DllCall('user32.dll', 'long', 'LoadKeyboardLayout', 'str', $sLayoutID, 'int', 0) DllCall('user32.dll', 'ptr', 'SendMessage', 'hwnd', $hWnd, _ 'int', $WM_INPUTLANGCHANGEREQUEST, _ 'int', 1, _ 'int', $ret[0]) EndFunc |
|