Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
Сама программа - нет, скрипт по эмуляции работы человека - на AutoIT
Maza Faka
01-08-2008, 07:51
DImaN!
Непонятен смысл такого "логирования". Ведь все действия и так будут описаны в скрипте :) Смотри функции FileWrite(); FileWriteLine()
Babullika
01-08-2008, 22:03
Здраствуйте , уважаемые програмисты , подскажите как можно средствами AutoIT определить что программа зависла ? Нужно типо if <прога зависла> do ...
266903582
01-08-2008, 23:11
По вопросу записи действий пользователя могу подкинуть примерчик. Писал для личного пользования, упрощал создание автоустановщика программ.
#include <Misc.au3>
FileDelete("file.au3")
$dll = DllOpen("user32.dll")
$file = FileOpen("file.au3", 1)
$ffi=""
wr("run('')")
while not _IsPressed("11", $dll) ;ждем нажатия контрола
sleep(10)
WEnd
TrayTip("","ЗАПИСЫВАЕМ",1)
While 1
if _IsPressed("01", $dll) Then ;lmb ctrltext & classn
$wtt=WinGetTitle("")
$wgt=WinGetText("")
$wgt=repl($wgt)
$cgf=ControlGetFocus("")
if $cgf<>"" then wr("cl('"&$wtt&"','"&$wgt&"','"&$cgf&"')") ;ControlGetText("","",ControlGetFocus(""))&@lf&
ToolTip($wtt&@lf&$cgf)
EndIf
if _IsPressed("13",$dll) Then
TrayTip("","ПАУЗА",1)
sleep(300)
while 1
if _IsPressed("13",$dll) Then ExitLoop
sleep(10)
WEnd
TrayTip("","ЗАПИСЫВАЕМ",1)
sleep(300)
EndIf
if _IsPressed("1b", $dll) Then ExitLoop ;esc
sleep(10)
WEnd
;дополнение :)
wr("Func wa($tx1, $tx2)")
wr(" While WinExists($tx1, $tx2)=0")
wr(" Sleep(1) ")
wr(" WEnd ")
wr("EndFunc")
wr("Func cl($tx1, $tx2,$classn)")
wr(" wa($tx1, $tx2)")
wr(" ControlClick($tx1, $tx2,$classn)")
wr("EndFunc")
DllClose($dll)
FileClose($file)
Func wr($ff)
if $ffi<>$ff then
FileWrite($file,$ff&@LF)
$ffi=$ff
EndIf
EndFunc
Func wa($tx1, $tx2)
While WinExists($tx1, $tx2)=0
Sleep(1)
WEnd
EndFunc
Func cl($tx1, $tx2,$classn)
wa($tx1, $tx2)
ControlClick($tx1, $tx2,$classn)
EndFunc
func repl($ffff)
$tempstr=$ffff
$tempstr=StringReplace($tempstr,@crlf,@lf)
$tempstr=StringReplace($tempstr,@cr,@lf)
$ffff=""
$buff=""
$counter=0
while StringLen($ffff)<200; or StringLen($tempstr)<>0
$symb=StringLeft($tempstr,1)
$tempstr=StringTrimLeft($tempstr,1)
$buff=$buff&$symb
if $symb=@lf Then
if $counter<10 then $buff=""
if $counter>=30 then
$ffff=$ffff&$buff;&@lf
$counter=0
$symb=""
EndIf
EndIf
if $symb<>@lf Then $counter+=1
if StringLen($tempstr)=0 then ExitLoop
WEnd
$ffff=StringReplace($ffff,"'","")
return $ffff
EndFunc
После его работы файл необходимо подредактировать и все готово :)
Хотя скрипт до ума так и не доведен, но пользоваться можно.
Solitude
02-08-2008, 01:59
Подскажите, можно ли средставми AutoIt изменять резрешения к определенному разделу реестра ?
Maza Faka
02-08-2008, 08:29
Babullika
как можно средствами AutoIT определить что программа зависла ?
$hWnd = WinGetHandle("Документ1 - Microsoft Word")
$aRet = DllCall("user32.dll", "int", "IsHungAppWindow", "hwnd", $hWnd)
If $aRet[0] = 1 Then MsgBox(64, "Внимание", "Приложение не отвечает")
Проверил на MS Word-e, "вешаем" его вот этой строчкой: уточнение наличия запасов м.с.;, и хотя в официальном описании (http://msdn.microsoft.com/en-us/library/ms633526(VS.85,printer).aspx) сказано, "Ghost windows always return TRUE", тем не менее функция работает правильно :)
Babullika
02-08-2008, 13:47
2 Maza Faka СПАСИБО огомное !
Щас появилась ещё одна проблемма , делаю ProcessClose на прогу у которой есть иконка в трее и иконка непропадает пока на неё не наведёшь мышкой , можно как-нибудь сделать чтоб она сразу пропадала ?
Maza Faka
02-08-2008, 14:08
Babullika
SystemTray_Refresh (http://www.autoitscript.com/forum/index.php?showtopic=66629&view=findpost&p=493629)
Подскажите пожалйста примерчик следующего скрипта: скрипт проверяет соединение с интернетом, если таковое отсутствует то подключает подключение по умолчанию. Буду премного благодарен!!!
Хочу поделиться закомпиленным скриптом, взятым в FAQ-е по автоустановке, подредактированного мной, для авторебута компьютера, после первого логона в систему:
Народ помогите
есть задачка:
нужно узнать какие основной dns и альтернативный dns использует пользователь и если они не правильные то поменять их на правильные.
пример:
основной dns: 192.168.0.1
альтернативный dns: 192.168.0.2
надо поменять на
основной dns: 192.168.0.254
альтернативный dns: 192.168.0.253
при этом надо учитывать что само соединение может называться по разному:
Local Area Connection
или Local Area Connection2
....
Local Area Connection10
или
Подключение по локальной сети
.....
Подключение по локальной сети3
...
Wu-Tang
ОФФТОП: эта тема для обсуждения открытого кода, а не "закрытых" приложений
BrAWo
если они не правильные то поменять их на правильные »может не заморачиваться лишними строчками кода и сразу вбивать без проверки?Dim $aDNSList[2]=["192.168.0.1","192.168.0.2"]
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
$colNetCards = $objWMIService.ExecQuery ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For $objNetCard In $colNetCards
$intErrorSetDNSServerSearchOrder = $objNetCard.SetDNSServerSearchOrder($aDNSList)
Next
Maza Faka
06-08-2008, 08:09
Positiv
скрипт проверяет соединение с интернетом
Подключение Dial-UP?
Maza Faka, нет, подключени высокоскоростное(DSL). А разве это важно. Подключение в точности такое же как и у диалапа.
Maza Faka
06-08-2008, 13:51
Positiv
А разве это важно
Да, что бы наверняка определить состояние, вот для начала, проверь какие строки возвращаются при подключенном и отключенном соеденении:
Global Const $INTERNET_CONNECTION_MODEM = 0x1
Global Const $INTERNET_CONNECTION_LAN = 0x2
Global Const $INTERNET_CONNECTION_PROXY = 0x4
Global Const $INTERNET_CONNECTION_MODEM_BUSY = 0x8
Global Const $INTERNET_RAS_INSTALLED = 0x10
Global Const $INTERNET_CONNECTION_OFFLINE = 0x20
Global Const $INTERNET_CONNECTION_CONFIGURED = 0x40
Dim $State, $val
$InetStruct = DllStructCreate("int")
DllCall("wininet.dll", "int", "InternetGetConnectedState", "ptr", DllStructGetPtr($InetStruct), "dword", 0)
$val = DllStructGetData($InetStruct, 1)
If BitAND($val, $INTERNET_CONNECTION_MODEM) Then $State &= "Modem connection" & @LF
If BitAND($val, $INTERNET_CONNECTION_LAN) Then $State &= "LAN connection" & @LF
If BitAND($val, $INTERNET_CONNECTION_PROXY) Then $State &= "Proxy connection" & @LF
If BitAND($val, $INTERNET_CONNECTION_MODEM_BUSY) Then $State &= "Modem bussy" & @LF
If BitAND($val, $INTERNET_RAS_INSTALLED) Then $State &= "RAS installed" & @LF
If BitAND($val, $INTERNET_CONNECTION_OFFLINE) Then $State &= "Offline connection" & @LF
If BitAND($val, $INTERNET_CONNECTION_CONFIGURED) Then $State &= "Connection configured"
MsgBox(0, "Connection", $State)
Подключение в точности такое же как и у диалапа
А как дозваниваешься? У меня dial-up подключение, поэтому все тонкости ADSL подключения я не знаю.
Maza Faka, при отключенном соединении выдает в одном окне следующее: LAN connection, Proxy connection, RAS installed, Connection configured.
При подключенном же: Modem connection, RAS installed, Connection configured. А
дозвон так же как и на диалапе, в окне вводишь имя и пароль и жмешь кнопочку подключение.
может не заморачиваться лишними строчками кода и сразу вбивать без проверки? »
Спасибо огромное
можно еще небольшой вопрос:
если указано:
основной dns: 192.168.0.1
альтернативный dns: 192.168.0.2
а нужно оставить только:
основной dns: 192.168.0.1
Maza Faka
07-08-2008, 09:14
Positiv
Попробуй так:
If _GetConnectState() = 1 Then Exit
Global Const $INTERNET_AUTODIAL_FORCE_UNATTENDED = 0x02
$ConNumber = DllStructCreate("int")
DllStructSetData($ConNumber, 1, 0)
DllCall("wininet.dll", "int", "InternetDial", "hwnd", 0, _
"ptr", 0, _
"int", $INTERNET_AUTODIAL_FORCE_UNATTENDED, _
"ptr", DllStructGetPtr($ConNumber), _
"int", 0)
Func _GetConnectState()
Local Const $INTERNET_CONNECTION_MODEM = 0x1
Local $InetStruct = DllStructCreate("int")
DllCall("wininet.dll", "int", "InternetGetConnectedState", "ptr", DllStructGetPtr($InetStruct), "dword", 0)
If BitAND(DllStructGetData($InetStruct, 1), $INTERNET_CONNECTION_MODEM) Then Return 1
EndFunc
BrAWo
нужно оставить только:
основной dns: 192.168.0.1 »
хоть один, хоть десять - первая строка:Dim $aDNSList[1]=["192.168.0.1"]
Подскажите, как отправить Alt+<русская буква> в какое-нибудь приложение? Например Alt+Ф в блокнот.
Перепробовал кучу вариантов, в том числе:
Send(!Ф)
Send({ALT}ф)
Send({ALT}{ф})
и т.п.
Ничего не работает. Приходится иметь дело с русскими менюшками, лучшего способа, чем посылать шорткаты, нет. Autoit юзается как activex из ruby, возможностей заюзать "дополнительные" функции нет.
Вопрос проскакивал в топике, но ответа не было.
Если кто знает решение - напишите пожалуйста.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.