Что нового

Controlsend то работает, то нет

lexaSF

Новичок
Сообщения
182
Репутация
3
Помогите! да чтож то такое то!Вот код!
Код:
$Dir = @ScriptDir & '\Setting.ini'
$akk = IniReadSectionNames($Dir)
If IsArray($akk) = 1 Then
For $Start = 1 To $akk[0]
	$ID = IniRead($Dir,$akk[$Start],'ID','none')
	$SID = IniRead($Dir,$akk[$Start],'SID','none')
	$Server = IniRead($Dir,$akk[$Start],'SERVER','none')
	$Map = IniRead($Dir,$akk[$Start],'MAP','none')
	$Setting = IniRead($Dir,$akk[$Start],'SETTING','none')
	$ExeFile = @ScriptDir & '\UDOBot.exe'
	Run($ExeFile, @ScriptDir)
    WinWait('UDOBot v.4.0.1','SID:')
	Sleep(300)
    ControlSetText('UDOBot v.4.0.1','SID:','[NAME:textBox1]',$ID,1)
	Sleep(300)
	ControlSetText('UDOBot v.4.0.1','SID:','[NAME:textBox2]',$SID,1)
	ControlSetText('UDOBot v.4.0.1','SID:','[NAME:textBox3]',$SERVER,1)
	Sleep(500)
	$1 = ControlGetHandle('UDOBot v.4.0.1','','[NAME:comboBox1]')
		_GUICtrlComboBox_SetCurSel($1,$Map)
	ControlClick('UDOBot v.4.0.1','SID:','[NAME:button1]')
	WinWait('UDOBot v.4.0.1','Настройки')
	Sleep(300)
	ControlClick('UDOBot v.4.0.1','SID:','[NAME:menuStrip1]')
	$Hand = WinGetHandle('UDOBot v.4.0.1','Настройки')
	$r = ControlSend('UDOBot v.4.0.1','Прочка:',$Hand,'{ALT}')
    Sleep(300)	
	$a = ControlSend('UDOBot v.4.0.1','Прочка:',$Hand,'{ENTER 2}')
	Sleep(300)
	If $Setting = 'None' Then 
		Exit
	EndIf
		$hFile=FileOpen(@ScriptDir & '\settings\' & $Setting, 0)
If $hFile = -1 Then
    MsgBox(0, "Error", "Unable to open Setting file.",2)
EndIf

оПять глюки какие то! ControlSend не работает, за то когда отдельно от скрипта, той же самой коммандой с теми же параматрами - работает!Почему может быть?Самое странное что вчера работало) :-X
 

sendsay

sendsay
Сообщения
29
Репутация
0
попробуй после WinGetHandle поставить тоже паузу, у меня тоже как то не работало, пока не поставил паузу.
Да, и поставь AutoIt по новее.
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
у меня самый новый.Пробовал, все равно ничего не делает
 

sendsay

sendsay
Сообщения
29
Репутация
0
так ты хочешь нажать кнопку (ALT) а затем кнопку (ENTER 2)???
Если да то ты не то пользуешь!!! :laugh:
тебе надо ControlClick. я задаю его так ControlClick('[CLASS:TfrmDKMove]', 'Z', '[CLASS:TButton; INSTANCE:3]')

CLASS:TfrmDKMove - класс окна к которому обращаемся.
'Z' - текст этого окна
CLASS:TButton; INSTANCE:3 - кнопка которую надо нажать

ЗЫ. Я работаю с автоит в дельфи по этому ковычки другие.

Чето я не то тебе начесал!!! SORRY
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
У меня так не получиться, так как надо симулировать нажатие на пункт меню окна, и на подстроку. В прогррамме при нажатии ALT каретка переносится на нужный пункт меню, ENTER 2 нажимает ENTER появляется список подстрок 2 ENTER выбирает нужную мне строку.
Так что Button мне не подойдет(
 

sendsay

sendsay
Сообщения
29
Репутация
0
Да чето я тебе не то сказал. Проверь что возвращает 1 или 0??


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

Вот в чем твоя проблема!!!

читай хелп внимательно!!!

eng:
Note, this function cannot send all the characters that the usual Send function can (notably ALT keys) but it can send most of them--even to non-active or hidden windows!

rus:
Обратите внимание, эта функция не может отправить все символы, которые обычно отправляет функция SEND (в частности ALT клавиша), но она может отправить большинство из клавиш.

Так что тебе не повезло. Используй SEND
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
sendsay сказал(а):
Да чето я тебе не то сказал. Проверь что возвращает 1 или 0??


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

Вот в чем твоя проблема!!!

читай хелп внимательно!!!

eng:
Note, this function cannot send all the characters that the usual Send function can (notably ALT keys) but it can send most of them--even to non-active or hidden windows!

rus:
Обратите внимание, эта функция не может отправить все символы, которые обычно отправляет функция SEND (в частности ALT клавиша), но она может отправить большинство из клавиш.

Так что тебе не повезло. Используй SEND



Интересно, значит вчера могла а сегодня уже не может? ;D Самое интересное, отдельно от скрипта все работает)))
 

sendsay

sendsay
Сообщения
29
Репутация
0
В этом то и вся фишка. У меня тоже многое на автоите вчера работает, а сегодня нет. )))) но я думаю что все таки надо SEND, и хелп говорит что ALT не передает. :smile:


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

Да чуть не забыл!!!!
WinGetHandle возвращает хендл окна, а тебе надо контрола.
По этому используй ControlGetHandle.
Думаю после этого все заработает!!! ;D
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
sendsay сказал(а):
В этом то и вся фишка. У меня тоже многое на автоите вчера работает, а сегодня нет. )))) но я думаю что все таки надо SEND, и хелп говорит что ALT не передает. :smile:


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

Да чуть не забыл!!!!
WinGetHandle возвращает хендл окна, а тебе надо контрола.
По этому используй ControlGetHandle.
Думаю после этого все заработает!!! ;D



Пробовал не заработало)
 

sendsay

sendsay
Сообщения
29
Репутация
0
Все равно не пойму зачем ты используешь ControlSend.
Ведь ты же ожидаешь появления окна (WinWait('UDOBot v.4.0.1','Настройки')).
Когда окно появиться, активируй его и пошли ему ALT, а затем ENTER 2 раза.






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

Вот еще что: когда то у меня тоже не работало из за Opt("WinTextMatchMode") так как текст который я указывал не совпадал.
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
sendsay сказал(а):
Все равно не пойму зачем ты используешь ControlSend.
Ведь ты же ожидаешь появления окна (WinWait('UDOBot v.4.0.1','Настройки')).
Когда окно появиться, активируй его и пошли ему ALT, а затем ENTER 2 раза.






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

Вот еще что: когда то у меня тоже не работало из за Opt("WinTextMatchMode") так как текст который я указывал не совпадал.



\это удобнее)
 

sendsay

sendsay
Сообщения
29
Репутация
0
lexaSF сказал(а):
sendsay сказал(а):
Все равно не пойму зачем ты используешь ControlSend.
Ведь ты же ожидаешь появления окна (WinWait('UDOBot v.4.0.1','Настройки')).
Когда окно появиться, активируй его и пошли ему ALT, а затем ENTER 2 раза.






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

Вот еще что: когда то у меня тоже не работало из за Opt("WinTextMatchMode") так как текст который я указывал не совпадал.



\это удобнее)




ПОЛНОСТЬЮ С ТОБОЙ СОГЛАСЕН!!!!!
Так код выглядит лучше, читабельнее да и вообще красиво.
Но если я правильно понял, у тебя пока нет выхода, придется писАть коряво.
:blum:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 470
Репутация
2 401
lexaSF
Последний раз предупреждаю на счёт OverQuoting (преувеличенное цитирование).

[?]
Пробовал не заработало
Как пробовал?
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
Sleep(3000)
$r = ControlGetHandle('UDOBot v.4.0.1','SID:','[NAME:menuStrip1]')
ControlSend('UDOBot v.4.0.1','SID:',$r,'{LEFT}')
Так не работает.Со скриптом - не работает.
Зато так работает
Код:
$t = WinGetHandle('UDOBot v.4.0.1','Прочка:')
ControlSend('UDOBot v.4.0.1','Прочка:',$t,'{ALT}')
Sleep(250)
ControlSend('UDOBot v.4.0.1','Прочка:',$t,'{ENTER}')
Sleep(250)
ControlSend('UDOBot v.4.0.1','Прочка:',$t,'{ENTER}')

парадокс какой - то
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
помогите!
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Выложи скриншот и напиши подробнее, что там нужно "кликнуть".
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
lexaSF [?]
$r = ControlGetHandle('UDOBot v.4.0.1','SID:','[NAME:menuStrip1]')
ControlSend('UDOBot v.4.0.1','SID:',$r,'{LEFT}')
Так не работает.Со скриптом - не работает.
А в чём собственно загвоздка?
Код:
WinActivate("UDOBot v.4.0.1")
$hCtrl =  ControlGetHandle("UDOBot v.4.0.1", "", "menuStrip1")
ControlSend("UDOBot v.4.0.1", "", $hCtrl, "{LEFT}")
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
Garrett сказал(а):
lexaSF [?]
$r = ControlGetHandle('UDOBot v.4.0.1','SID:','[NAME:menuStrip1]')
ControlSend('UDOBot v.4.0.1','SID:',$r,'{LEFT}')
Так не работает.Со скриптом - не работает.
А в чём собственно загвоздка?
Код:
WinActivate("UDOBot v.4.0.1")
$hCtrl =  ControlGetHandle("UDOBot v.4.0.1", "", "menuStrip1")
ControlSend("UDOBot v.4.0.1", "", $hCtrl, "{LEFT}")
Странно, раньше не работало, но я посылал АЛТ, спс что подсказали другой способ))
 
Верх