Что нового

Вставка данных в фоновое окно программы

prokazzza

Новичок
Сообщения
160
Репутация
2
Существует программа, при её работе на фоновом режиме есть программное консольное окно в котором отображается загрузка и работа программы. Подскажите как не сворачивая основную программу ввести некоторые данные в консоль (Edit1) при появлении определенных данных к примеру появления строки Setting our NAT to Open (Edit2).
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Вставка данных в GUI элемент управления
Код:
ControlSend
ControlSetText

В большинстве случаев будет работать и с фоновым приложением.

Чтение данных из GUI элемента управления
Код:
ControlGetText

Так же, в большенстве случаев будет работать и с фоновым приложением.

В справке раздел: Window functions > Controls
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Это я не осилю, плиз хотя бы примерчик скрипта, а дальше разберусь.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Настоятельно рекомендую открыть справку.
И даже более, открыть хотя бы одну из страниц по выше приведенным функциям.
Т.к. в справке на все-все функции уже есть примеры!
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
`p r o x y сказал(а):
Настоятельно рекомендую открыть справку.
И даже более, открыть хотя бы одну из страниц по выше приведенным функциям.
Т.к. в справке на все-все функции уже есть примеры!
Теперь объясни как мне объединить эти 2 функции в один скрипт?? Как я уже писал в консольном окне бегут строки загрузки программы, при определенных строках, а не когда попало на фоновом режиме мне надо вставить определенные данные. В приведенных тобой примерах также нету объяснения мониторинга скрипта, нету того как сделать чтобы это консольное окно также оставалось в фоновом режиме, а не появлялось поверх окон и вставляло данные. На фоновом режиме еще и Ентер нужно нажать, чтобы команды ввелись в консоле.


TO ALL
Тут есть кто-нить кто может помочь в написании этой функции???
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
prokazzza
Ни я, ни кто другой с форума ни чем Вам не обязаны.
Каждый желающий помогает по мере сил и желания.
За Вас вашу работу ни кто просто так делать не будет.

С помощью autoIt можно написать очень многое. Что реализовывается разными функциями.
Советую, для начала, открыть справку и разобраться хотя бы:
Код:
ControlGetText


Хотя если это консольное окно, то:
Код:
StderrRead


Если нет делания разбираться, тогда в раздел Стол заказов.
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
`p r o x y

Ты мне извини, но помоему ты не утруждаешь себя чтением сообщений и не вникаешь в них. Либо понимаешь не так как нужно.

Вот функция которую ты советуешь изучить, изучил, вот что получилось:

Код:
Run("Программа.exe")
WinWait("[CLASS:Программа]")
$var = ControlGetText("[CLASS:Программа]", "Необходимый текст", "Окно программы где находится текст")
Правильно или нет? Далее в этом же скрипте:

Код:
WinWait("[CLASS:Программа]")
ControlSetText("[CLASS:Программа]", "", "Окно программы куда необходимо ввести текст", "И сам текст" )

1 кусоку скрипта пофиг на то есть ли такой текст или нету. 2 куску тоже пофиг нашол ли 1 кусок скрипта необходимый текст или нет, тупо вставляет данные сразу же после запуска скрипта. Далее все это происходит поверх всех окон, а мне нужно чтоб консоль так и оставалась в фоновом режиме. Уже 3 раз пишу одно и тоже.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 713
prokazzza, ты бы хоть скриншот привел что-ли... Для полной ясности.

:smile:
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Yashied сказал(а):
prokazzza, ты бы хоть скриншот привел что-ли... Для полной ясности.

:smile:


Вот скрин консоли. Она работает в фоновом режиме. В верхнее окошко (оно в au3info определяется как Edit1) нужно вставить необходимые данные, когда в нижнем окне (определяется как Edit2) появится надпись Setting our NAT to Open. Вот и все.

:(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 713
Попробуй.

Код:
Opt('WinTitleMatchMode', 3)

$hWnd = WinWait('Название окна твоей программы')
While 1
	$sText = ControlGetText($hWnd, '', '[CLASSNN:Edit2]')
	If $sText Then
		$aData = StringSplit($sText, @CR)
		If StringInStr($aData[$aData[0]], 'Setting our NAT to Open') Then
			ControlSetText($hWnd, '', '[CLASSNN:Edit1]', 'Необходимые данные')
			Exit
		EndIf
	EndIf
	Sleep(100)
WEnd
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Не получается, вывел консоль поверх окон все равно не получается. :(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 713
А $hWnd у тебя определяется?

Код:
ConsoleWrite(WinWait('Название окна твоей программы') & @CR)


Естественно название окна должно быть свое. Я проверил на следующем примере, все OK.

Код:
GUICreate('Название окна твоей программы', 400, 400)
GUICtrlCreateInput('', 10, 10, 380, 19)
$Edit = GUICtrlCreateEdit('', 10, 40, 380, 350)
GUISetState()

Sleep(5000)

GUICtrlSetData($Edit, 'Setting our NAT to Open...')

Do
Until GUIGetMsg() = -3
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Без понятия что такое $hWnd :smile:, но скрипт отработал повисел 0,5-1 секунду в трее и закрылся. Ошибок никаких не было.

Насчет строки Setting our NAT to Open, она может быть в консольном окне не только вверху. )
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 713
Код:
Opt('WinTitleMatchMode', 3)

$hWnd = WinWait('Название окна твоей программы')
While 1
    $sText = ControlGetText($hWnd, '', '[CLASSNN:Edit2]')
    If $sText Then
        $aData = StringSplit($sText, @CR)
        If StringInStr($aData[$aData[0]], 'Setting our NAT to Open') Then
            ControlSetText($hWnd, '', '[CLASSNN:Edit1]', 'Необходимые данные')
            Exit
        EndIf
    EndIf
    Sleep(100)
WEnd


Объясняю еще раз. Этот скрипт у меня прекрасно работает. Здесь нужно только поменять заголовок искомого окна "Название окна твоей программы" на тот, который имеет твоя консоль. На скриншоте его вообще нет. Если так, то нужно плясать от чего-нибудь другого, например от размеров окна, но хендл ($hWnd) нужно определять в любом случае. Без этого, никуда ничего вставить не получиться.

И еще один вопрос. Строки в консоли появляются в конце или в начале списка? Т.е., самая последняя запись будет вверху или внизу?
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Вот что выдает au3info:

>>>> Window <<<<
Title: IPnetServer Console
Class: IPS Console
Handle: 0x00260472

Проверил вставку данных через:

Код:
WinWait("[CLASS:Программа]")
ControlSetText("[CLASS:Программа]", "", "Окно программы куда необходимо ввести текст", "И сам текст" )


Текст нормально вставляется. Получается скрипт опознает консоль.

Насчет строк в консоли. Последняя запись будет внизу.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 713
Код:
Opt('WinTitleMatchMode', 3)

$hWnd = WinWait('IPnetServer Console')
While 1
    $sText = ControlGetText($hWnd, '', '[CLASSNN:Edit2]')
    If $sText Then
        $aData = StringSplit($sText, @CR)
        If StringInStr($aData[$aData[0]], 'Setting our NAT to Open') Then
            ControlSetText($hWnd, '', '[CLASSNN:Edit1]', 'Необходимые данные')
            Exit
        EndIf
    EndIf
    Sleep(100)
WEnd
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Нет не выходит :(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 713
Что выдает следующее (какой-нибудь текст в Edit2 должен быть)?

Код:
$hWnd = WinGetHandle('IPnetServer Console')
MsgBox(0, '', $hWnd)
$sText = ControlGetText($hWnd, '', '[CLASSNN:Edit2]')
MsgBox(0, '', $sText)
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Выдает вот это:



При нажатии на ОК, появляется еще окно со строками из консоли.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 713
Ну а так-то работает?

Код:
$hWnd = WinWait('IPnetServer Console')
While 1
	If StringInStr(ControlGetText($hWnd, '', '[CLASSNN:Edit2]'), 'Setting our NAT to Open') Then
		ControlSetText($hWnd, '', '[CLASSNN:Edit1]', 'Необходимые данные')
		ExitLoop
	EndIf
	Sleep(100)
WEnd
 
Верх