PDA

Показать полную графическую версию : [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [44] 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

no_sound
08-09-2008, 14:18
Прошу прощения если не в тему пишу, но заметил таку интересную команду:
Run("rundll32.exe netshell.dll,StartNCW"). Написано, что она работает и на Windows Vista. Я попробовал запустить - результата нет. Даже сообщения никакого не выдает. Подскажите что делать? Может есть альтернативные библиотеки или под Vista по другому называются?

Иск
08-09-2008, 21:15
Помогите пож еще раз...наверное замучил уже...Я считываю 4 раза изменение полоски состояния, получаю 4 значения $res. Допустим, $res1=207, $res2=208, $res3=355, $res4=355. Теперь мне надо что бы в программа сравнила их по критериям, которые я задал. Т.к. Критериев для обработки много, я путаюсь и не знаю что с ними делать :( . Пробовал через IF -Then, как показано ниже, но выдает ошибку

If $res1<>$res2, $res2=$res4 Then
If $res1<>$res2^ ERROR

В связке If-Then-ElseIf таже ошибка. Может параметры не правильно заданы и нельзя так их вводить, тоесть через запятую?
Просто сразу после того как первый IF не соответствует действительности вылетает ошибка. Как сделать что бы программа из предложеных условий выбирала нужное и действовала согласно результату? Упростить до двух считываний изменений и потом сравнения их нельзя, надо что бы именно 4 сравнивало. Что посоветуете?...

if $res1=$res4 Then
Send("1")
EndIf
If $res1<>$res2, $res2=$res4 Then
Send("1")
EndIf
If $res1<>$res2, $res2<>$res3, $res3=$res4 Then
Send("1")
EndIf
If $res1=$res2, $res2<>$res3, $res3=$res4 Then
Send("1")
EndIf
If $res1=$res3, $res3<>$res4 Then
Send("5")
EndIf
If $res1<>$res2, $res2<>$res3, $res3<>$res4 Then
Send("5")
EndIf
If $res1<>$res2, $res2=$res3, $res3<>$res4 Then
Send("5")
EndIf


Если пишу так:

ElseIf $res1=$res2<>$res3=$res4 Then
Send("5")

то с ошибкой не выкидывает, но нажимает всегда "1", даже если видно что полоско двигается вперед и назад...

Попробовал задать по-другому :

ElseIf $res1=$res2<$res3=$res4 Then
Send("5")

Теперь жмет что надо, но загвоздка в том, что может быть так $res2<$res3, а может быть так $res2 >$res3.... если ставлю <>, то не обрабатывает.... Как можно еще поставить неравенство? Неужели надо кучу IF добавлять? :(

Creat0R
08-09-2008, 23:52
Иск,
Может параметры не правильно заданы и нельзя так их вводить, тоесть через запятую?
Нет конечно, тут нужно использовать And (логическое “И”) / Or (логическое “Или”), в справке всё это есть :)...

$res1 = 207
$res2 = 208
$res3 = 355
$res4 = 355

If ($res1 = $res4) Or _
($res1 <> $res2 And $res2 = $res4) Or _
($res1 <> $res2 And $res2 <> $res3 And $res3 = $res4) Or _
($res1 = $res2 And $res2 <> $res3 And $res3 = $res4) Then

;Send("1")
ConsoleWrite(1)
ElseIf ($res1 = $res3 And $res3 <> $res4) Or _
($res1 <> $res2 And $res2 <> $res3 And $res3 <> $res4) Or _
($res1 <> $res2 And $res2 = $res3 And $res3 <> $res4) Then

;Send("5")
ConsoleWrite(5)
EndIf

Иск
09-09-2008, 03:16
Нет конечно, тут нужно использовать And (логическое “И”) / Or (логическое “Или”), в справке всё это есть ... »

Ага, есть :) только в жизни бы не догадался что ,цитирую : "AND Оператор логического умножения" и есть нужная мне запятая :) В общем потихоньку разбираюсь...Спасибо за помощь!Все теперь работает как и задумано!

amel27
09-09-2008, 10:32
no_sound
Прошу прощения если не в тему пишу »
не думаю, что тут у многих Vista... попробуйте спросить ЗДЕСЬ (http://forum.oszone.net/forumdisplay.php?s=&daysprune=&f=83)
без привязки к AutoIT CMD-команда будет:
rundll32.exe netshell.dll,StartNCW

SvetlanaK
11-09-2008, 12:56
Добрый день! а не подскажет ли кто, можно ли в АИ отслеживать время? и подобно виндусовому планировщику задач запускать нужные функции по назначенному времени?

Creat0R
11-09-2008, 13:35
можно ли в АИ отслеживать время? и подобно виндусовому планировщику задач запускать нужные функции по назначенному времени? »
Можно конечно...

Creat0R
11-09-2008, 13:52
Вот пример:


Global $sDestTime = "14:00:00, 11.09.2008"
Global $sCallFunction = "_MyTask1"

AdlibEnable("CheckTimeProc", 10)

While 1
Sleep(10)
WEnd

Func CheckTimeProc()
Local $iFullDestTime = StringRegExpReplace($sDestTime, "[:,\. ]", "")
Local $iCurrentTime = @HOUR & @MIN & @SEC & @MDAY & @MON & @YEAR

If $iFullDestTime = $iCurrentTime Then Call($sCallFunction)
EndFunc

Func _MyTask1()
MsgBox(64, "Hi", "Hello from _MyTask1 :)")
EndFunc

Maza Faka
11-09-2008, 15:11
Creat0R
У тебя опечатка в коде AdlibDisable("CheckTimeProc", 10) ;)

SvetlanaK
11-09-2008, 15:37
спасибо-преспасибо Вам большое-пребольшое :clapping: ! я уже заметила опечатку и исправила:) ! отлично, все работает!

no_sound
11-09-2008, 15:52
Может кто подскажет: как в функциях WinWait и WinActivate записывать не полное название окна, а, скажем, одно слово и чтоб все рабтало? :) Или нужно только название целиком?

Рысь
11-09-2008, 16:29
no_sound, укажи в тексте проги
Opt("WinTitleMatchMode", 2) ; опознание окон по части заголовка

WinActivate("Здесь пиши часть заголовка окна", "")

no_sound
11-09-2008, 16:46
Opt("WinTitleMatchMode", 2) ; опознание окон по части заголовка »
Супер!!! сработало! Спасиба огромное!:)

no_sound
11-09-2008, 18:31
А можно как-то узнать координаты выделенного объекта(строки) в SysListView32, чтоб потом сделать по этой строчке ControlClick??

Вопрос снят - воспользовался командой ControlFocus :))

Creat0R
11-09-2008, 23:09
можно как-то узнать координаты выделенного объекта(строки) в SysListView32, чтоб потом сделать по этой строчке ControlClick?? »
Вместо клика можно просто выбрать элемент:


ProcessWait(Run("Taskmgr.exe"))

ControlListView("Диспетчер задач", "", "SysListView321", "SelectClear")
ControlListView("Диспетчер задач", "", "SysListView321", "Select", 2)
ControlFocus("Диспетчер задач", "", "SysListView321")

no_sound
12-09-2008, 10:29
Вместо клика можно просто выбрать элемент »
Спасибо, все получилось :)

lAGRESSORl
12-09-2008, 15:30
Всем прива !
Задачка вот такая:
1. проверить папку на удаленном компьютере на наличие файлов создать очет есть или нет (если возможно то как давно).
2. подцепиться к этой же машине, через РДП (Server 2003)
3. запустить определёную программу (софт) .
4. сделать скрин шот .
5. закрыть и сохранить отчет с картинкой в папке (фолдер).

6. (ну это вообше тяжко) послать папку на мыло или браузер.


Благодарю за внимание !!!

samara_andrey
12-09-2008, 15:46
Добрый день!
никто не сталкивался стакой проблеммкой как :
1.программа au3 скомпилина в exe
2.проинсталлена на windows vista и записана в автозагрузку
3.цель программки проверять обновления и скачивать их с выводом на экран сообщения.

и дальше вот такая фишка!!! инсталлируется, записывается в автозагрузку,запусается и висит в процессах. видно что циклически работает! но не загружает файлы из инета и не выводит на экран.
НО! если ее запустить тыкнув мышью, то все скачивается и выводится!!! и что странно в обоих вариантах программа ведь запускается из под одной учетной записи!
КТО знает в чем разница между запуском через автозагрузку и просто кликом, это почему то программке скомпилиной из autoit принципиально важно!

Рысь
12-09-2008, 16:12
lAGRESSORl, извиняюсь, но я не понял, Вы изучаете Автоит и просите помощи в разъяснении Вашей ошибки в скрипте или просто требуете чтобы Вам написали скрипт, нужный Вам?

samara_andrey, видимо ошибка в условиях проверки...наверняка при загрузке компутера (когда загрузилась система и начинают загружаться программы из Автозагрузки) интернет ещё не включён, следовательно Ваша программа опрашивает сервер на наличие обновлений, но не получает от него ответа, потому что инета нету, а потом заходит в цикл, когда появляется коннект с инетом, программа уже из цикла не может вылезти
но вообще ето гадание на кофейной гуще, нужен пациент для осмотра, дайте участок кода или всю программу, тогда можно будет сказать определённо где ошибка

samara_andrey
12-09-2008, 16:19
Я конечно не в совершенстве, но вполне нормально знаю autoit, но в основном работал под XP. а недавно перешел на висту. вот так и получилось, что с этой операционкой есть какието новые фишки!
А так я просто прошу подсказку и народа, может кто сталкивался. скрипт мне писать не надо, все сам уже давно написал, только вот через автозагрузку не хочет работать. в XP пашет,а в висте нет!


Добрый день!
никто не сталкивался стакой проблеммкой как :
1.программа au3 скомпилина в exe
2.проинсталлена на windows vista и записана в автозагрузку
3.цель программки проверять обновления и скачивать их с выводом на экран сообщения.

и дальше вот такая фишка!!! инсталлируется, записывается в автозагрузку,запусается и висит в процессах. видно что циклически работает! но не загружает файлы из инета и не выводит на экран.
НО! если ее запустить тыкнув мышью, то все скачивается и выводится!!! и что странно в обоих вариантах программа ведь запускается из под одной учетной записи!
КТО знает в чем разница между запуском через автозагрузку и просто кликом, это почему то программке скомпилиной из autoit принципиально важно!

Opt ("TrayIconHide", 1)
Sleep(5000)
InetGet("ftp://0000:0000000000@ftp.narod.ru/ini.ini", "ini.ini", 1)
$file = FileOpen("ini.ini", 0)
$chars = FileRead($file)
$file1 = FileOpen("dataini.ini", 0)
$chars1 = FileRead($file1)
if $chars <= $chars1 Then
Run ("installupdate.exe", "", @SW_HIDE)
Run ("rec.exe", "", @SW_HIDE)
Sleep(30000); pause 0.5 min
FileDelete("installupdate.exe")
FileClose($file)
FileDelete("ini.ini")
Exit
Else
FileClose($file)
FileClose($file1)
Sleep(5000) ; pause 5 sec
InetGet("ftp://0000:0000000000@ftp.narod.ru/rec.jpg", "rec.jpg", 1)
InetGet("ftp://0000:0000000000@ftp.narod.ru/rec2.jpg", "rec2.jpg", 1)
InetGet("ftp://0000:0000000000@ftp.narod.ru/rec3.jpg", "rec3.jpg", 1)
InetGet("ftp://0000:0000000000@ftp.narod.ru/rec4.jpg", "rec4.jpg", 1)
InetGet("ftp://0000:0000000000@ftp.narod.ru/rec5.jpg", "rec5.jpg", 1)
InetGet("ftp://0000:0000000000@ftp.narod.ru/rec6.jpg", "rec6.jpg", 1)
InetGet("ftp://0000:0000000000@ftp.narod.ru/rec7.jpg", "rec7.jpg", 1)
InetGet("ftp://0000:0000000000@ftp.narod.ru/rec8.jpg", "rec8.jpg", 1)
InetGet("ftp://0000:0000000000@ftp.narod.ru/rec9.jpg", "rec9.jpg", 1)
InetGet("ftp://0000:0000000000@ftp.narod.ru/rec10.jpg", "rec10.jpg", 1)
InetGet("ftp://0000:0000000000@ftp.narod.ru/installupdate.exe", "installupdate.exe", 1)
Sleep(5000);pause 5 sec
Run ("installupdate.exe", "", @SW_HIDE)
Run ("rec.exe", "", @SW_HIDE)
Sleep(30000); pause 0.5 min
FileDelete("installupdate.exe")
FileDelete("ini.ini")
$file1 = FileOpen("dataini.ini", 2)
FileWrite($file1, $chars)
FileClose($file1)
EndIf




© OSzone.net 2001-2012