Что нового

Установить русскую раскладку для InputBox, который вызывается из приложения

smogendrr

Новичок
Сообщения
6
Репутация
0
Я в приложении-органайзере запускаю autoit-скрипты.
В одном из них нужен InputBox, но он вызывается с английской раскладкой (по умолчанию в винде) даже если в органайзере - русская. При переключении раскладки на русскую во время работы InputBox вообще начинаются глюки, последующие Send работают неверно.

Нужно: Вызвать InputBox с русской раскладкой.
Назначал для InputBox родительским окном органайзер с русской раскладкой... не помогло


Код:
$SNewInputString = InputBox($Title, $TextInfo, $DefaultText,"",450,150,300,300,0,$MainWindowName)


пс: внутри органайзера переключить раскладку могу.
а как это сделать для вызываемого окна?
 
Автор
S

smogendrr

Новичок
Сообщения
6
Репутация
0
Код:
_WinAPI_SetKeyboardLayout ($hWnd) , 0x0419)


А куда эту строку пихать? до inputbox? после? в начало скрипта?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Код:
#include <WinAPIEx.au3>

$SNewInputString = InputBox('', '', '','', 450, 150, 300, 300, 0)
_WinAPI_SetKeyboardLayout ($SNewInputString , 0x0419)
 
Автор
S

smogendrr

Новичок
Сообщения
6
Репутация
0
Код:
#include <WinAPIEx.au3>

$SNewInputString = InputBox('', '', '','', 450, 150, 300, 300, 0)
_WinAPI_SetKeyboardLayout ($SNewInputString , 0x0419)


Попробовал, никаких изменений...
Мне кажется вызов изменения раскладки происходит уже после отрабатывания InputBox.

Да, строка получается в нужной кодировке, но печатать-то неудобно - на экране появляются английские буквы.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
FlatX007
Ты хоть бы проверял что советуешь :smile:.

smogendrr
Попробуй так:
Код:
#include <WinAPIEx.au3>

_WinAPI_SetKeyboardLayout(WinGetHandle('[CLASS:AutoIt v3;TITLE:' & AutoItWinGetTitle() & ']') , 0x0419)
$sInputString = InputBox('', '', '','', 450, 150, 300, 300, 0)
 
Автор
S

smogendrr

Новичок
Сообщения
6
Репутация
0
Код:
#include <WinAPIEx.au3>

_WinAPI_SetKeyboardLayout(WinGetHandle('[CLASS:AutoIt v3;TITLE:' & AutoItWinGetTitle() & ']') , 0x0419)
$sInputString = InputBox('', '', '','', 450, 150, 300, 300, 0)


Никаких изменений в поведении раскладки :stars:


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

Перепроверил... если отдельный скрипт под это создать - работает,
а вот внутри функции:

Код:
#include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>

Global $BaseName = "base7.kne" ; название текущей базы
Global $ProgrameName = "KeyNote NF  1.7.9 BETA 3" ; текущее название программы
Global $MainWindowName = $ProgrameName & " - " & "base7.kne" ; основное окно органайзера
Global $Rus = '00000419'; Раскладка русского языка
Global $Eng = '00000409'; Раскладка английского языка

; Выполняю Инпут на заданном языке
Func FInboxLang($Title, $TextInfo, $DefaultText, $Lang)
	_WinAPI_SetKeyboardLayout(WinGetHandle('[CLASS:AutoIt v3;TITLE:' & AutoItWinGetTitle() & ']') , $Lang)
	$SNewInputString = InputBox($Title, $TextInfo, $DefaultText,"",450,150,300,300,0,$MainWindowName)
	Return $SNewInputString
EndFunc

$SNewBusiness = FInboxLang('Text1', "Text2", "Text3 ", $Rus)


Вот в таком виде не работает... куда копать?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
smogendrr [?]
Вот в таком виде не работает... куда копать?
В неправильность использования.

Почему
Код:
$Rus = '00000419'

?
:scratch:

там должно быть Hex-значение.
Код:
Global $Rus = 0x00000419; Раскладка русского языка
Global $Eng = 0x00000409; Раскладка английского языка
 
Автор
S

smogendrr

Новичок
Сообщения
6
Репутация
0
Спасибо! Помогло.
Меня смутило, что в при переключении раскладки для существующего окна нужно десятичное значение:

Код:
$Rus = '00000419'

	$WinID=WinGetHandle($SWindowTitle)
	$ret=DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $Rus, "int", 0)
	DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $WinID, "int", "0x50", "int", 1, "int", $ret[0])


Вопрос решен.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
smogendrr [?]

[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Верх