PDA

Показать полную графическую версию : [Архив - Часть 1.2] 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

Creat0R
24-08-2006, 01:14
Ivan1986
А ProcessClose разве его не корректно завершеает?
Нет, эта опция "Убивает процесс".

По поводу винампа попробуй
Большое спасибо, немного помогло, но мне нужно чтобы появился винам, и затем открылось диалоговое окно для выбора файлов...
Я выкрутился временно так:


;Проверяю, если винам не запущен, то...
If Not ProcessExists("winamp.exe") Then

;Счинываю размещение винампа с реестра...
$PathToWinamp = RegRead("HKEY_CURRENT_USER\Software\Winamp", "")

;Запускаю винамп...
Run($PathToWinamp & "\winamp.exe", "")

EndIf

AutoItSetOption("WinTitleMatchMode", 4)
WinActivate("classname=WINAMP", "")
Sleep(1500)

;Открываю окно для выьбора файлов
Send ("l", 1)

Но таким образом, не всегда сработает, например, если машина слабая (медленная), то окно для выбора файлов может не появиться, а хотелось бы сделать ожидание окна винампа - но не получается.

LORDMA
28-08-2006, 11:20
Уважаемые знатоки помогите как в элементе "ClassNameNN: SysTreeView321" поставить чекбокс в нужном мне месте . Перерыл справку но ничего не нашел , наверняка есть как это сделать но ничего не могу найти??

Creat0R
28-08-2006, 14:52
Интересно, как можно задать в скрипте, чтобы определял два параметра командной строки? Т.е, например, я запускаю закомпилированный скрипт таким образом - start script.exe %l %c - Где %l это параметр, который интерпритируется как ссылка (запуск происходит их браузера opera), а %c это параметр, который передаёт содержимое буффера обмена. Так вот, после такого запуска, нужно чтобы для первого параметра происходило одно дейсТвие (пусть даже выводитя MsgBox со значением), а для второго параметра другое действие.

Или хотябы сделать так, чтобы можно было распозновать параметр не по его конечному значению (если %l то значение будет ссылкой по которой было нажато действие для вызова скрипта), а именно по его изначальному виду. Если скрипт допустим запущен так - start script.exe %l - то нужно чтобы в скрипте было распознование того, что его (скрипт) "вызвали" именно с таким ключом (т.к в скрипте есть ещё другие функции, вызываемые другими ключами)... я пробовал таким образом:

If $CmdLine[1] = "%l" Then
; Что-то делаем...
EndIf

Но Ничего не делается, в этом месте как будто не распознаётся реферрер...
Я пробовал и так:

If $CmdLine[1] = 0 Then
; Что-то делаем...
EndIf

Что-то делается :) , но тогда если в скрипте присутствует If $CmdLine[0] = 0 Then... То и в этом условии что-то делается (т.е как будто скрипт был запущен без параметров).

Sanja Alone
29-08-2006, 04:09
Creat0R
Вот простенький разборщик ком. строки:
If $CmdLine[0]<>0 Then
For $k=1 To $CmdLine[0] Step 1
;проверка наличия конкретного ключа
If $CmdLine[$k]="/a" Then
; Что-то делаем...
EndIf
;проверка наличия одного из ключей
Select
Case $CmdLine[$k]="/b"
; Что-то делаем...
Case $CmdLine[$k]="/c"
; Что-то делаем...
Case $CmdLine[$k]="/d"
; Что-то делаем...
EndSelect
Next
Else
MsgBox(16,'Ошибка',"Командная строка пуста...",7)
Exit
EndIfP.S. Гораздо удобнее вместо "Что-то делаем..." присваивать определенное значение какой-то переменной, а уже в самой программе производить действия в зависимости от значения этой переменной-флажка. К тому же, в данном сл., можно без проблем оформить анализ ком. строки в виде ф-ции.

KotoVAS
29-08-2006, 19:01
Доброго времени суток!!!
1.Сначала у меня вопрос
Как запустить папку Панель управления? а ещё лучше сразу открыть "свойства системы" (Система)

2.Обнаружил косяк. Собрал exe-шник, у меня работает хорошо и закрывается, а вот у друзей работает, но не закрывается - просто сворачивается в трей - что делать ??

3.И ещё как оказалось - у них не отображаются сообщения

MsgBox(0, "Сменщик имени рабочей группы", "Вы уже в группе PLEXUS")

Вааще странно. У меня всегда отображались :(

boss911
29-08-2006, 19:18
KotoVAS
Как запустить ... а ещё лучше сразу открыть "свойства системы" (Система)%WINDIR%\system32\sysdm.cpl

boss911
29-08-2006, 22:38
KotoVAS
А можно код открытия полностью ???Если вопрос ко мне, то я AutoIt неюзаю, а вообще, чтоб запустить команду в скрипте, то это наверно элементарно, ты же юзаеш и незнаеш как запустить команду!! :)

KotoVAS
29-08-2006, 22:43
Да все, как запустить я нашел - А мож знаешь надежный спосб переключения между закладками в "Свойства системы". Мышью пользвать и CTRL+TAB - не очень надежно )

Sanja Alone
30-08-2006, 01:45
KotoVAS
надежный способ переключения между закладками в "Свойства системы"Я еще в старой теме по AutoIt приводил (http://forum.oszone.net/showpost.php?p=393863&postcount=298) ссылку на "Справочник по командам rundll32 (http://www.dx21.com/scripting/rundll32/refguide.asp)". Vadikan посчитал нужным внести эту информацию в "шапку" данной темы и был абсолютно прав. Там есть строки запуска любых диалоговых окошек...

Вот полный список закладок окна "Свойства системы":
System Properties: Advanced (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=89&CMD=P-A)
System Properties: Advanced Tab (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=160&CMD=P-A)
System Properties: Automatic Updates (2003) (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=161&CMD=P-A)
System Properties: Automatic Updates (XP) (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=91&CMD=P-A)
System Properties: Computer Name (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=84&CMD=P-A)
System Properties: Device Manager (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=82&CMD=P-A)
System Properties: General (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=81&CMD=P-A)
System Properties: Hardware (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=86&CMD=P-A)
System Properties: Hardware Profiles (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=85&CMD=P-A)
System Properties: Network Identification (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=83&CMD=P-A)
System Properties: Performance (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=87&CMD=P-A)
System Properties: Remote (XP) (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=92&CMD=P-A)
System Properties: Remote (2003) (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=162&CMD=P-A)
System Properties: System Restore (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=90&CMD=P-A)
System Properties: User Profiles (http://www.dx21.com/SCRIPTING/RUNDLL32/VIEWITEM.ASP?OID=88&CMD=P-A)

P.S. Сейчас подправлю шапку, чтобы всем было понятно зачем нужен этот справочник.

Creat0R
30-08-2006, 11:04
Sanja Alone

Вот простенький разборщик ком. строки:
Болшое спасибо! это мне поможет запускать программу с несколькими ключами. Но вот как запускать с ключом, который заранее не известен? Т.е если запуск происходит с ключом %l, то скрипт его не распознаёт, т.к в результате этот ключь преобразовывается в ссылку (самим браузером). А нужно распознать что скрипт был запущен именно с таким ключом, и в данном случае должны происходить определённые операции.

XXXler
30-08-2006, 14:39
Болшое спасибо! это мне поможет запускать программу с несколькими ключами. Но вот как запускать с ключом, который заранее не известен?
тогда надо либо определится с количеством и\или порядком ключей\параметров либо делать подключи и опциональные параметры
я уже давал пример здесь (http://forum.oszone.net/post-461784-212.html), если его видоизменить то можно передавать определенные значения с подключами:

For $i=1 To $CmdLine[0]
Select
Case StringLeft(CmdLine[$i],5)="/url="
$url=StringTrimLeft(CmdLine[$i],5)

Case StringLeft(CmdLine[$i],6)="/save="
$savename=StringTrimLeft(CmdLine[$i],6)

....

EndSelect
Next

тогда можно вызывать с параметрами /url=http://ya.ru/logo.gif и\или /save=c:\temp, только следует не забывать что параметры с пробелами следует заключать в кавычки

prokazzza
30-08-2006, 15:07
Sanja Alone

помогите мне сделать сделать маленький скрипт на RAR SFX архив, нажать извлечь, потом вставить пароль с текстового дока, подождать пока распакуется, подождать пока запуститься установка проги, а потом нажать - No то есть не перезагружать комп.

заранее большое спасибо!

boss911
30-08-2006, 17:22
prokazzza
маленький скрипт на RAR SFX архив, нажать извлечьЗачем? Ключ /s , что не подходит!!

prokazzza
30-08-2006, 17:42
boss911

Зачем? Ключ /s , что не подходит!!

Ключ то подходит а вот потом кто вставит пароль и нажмет на кнопки?

boss911
30-08-2006, 18:02
prokazzza
а вот потом кто вставит пароль и нажмет на кнопки?Так может можно решить подобное через твик и вообще, что это за приложение!?
Сори, оффтоп получаетса!!

Creat0R
30-08-2006, 18:26
XXXler

можно передавать определенные значения с подключами
Приогромнейшее спасибо!

следует не забывать что параметры с пробелами следует заключать в кавычки
Если запускать программу с браузера опера, то там для этого предусмотренна возможность прописывания ключа с заглавной буквы, и тогда передаваемое значение (в данном случае адрес url + выделенный текст) будет автоматический помещаться в кавычки.

Вот как я приминил это дело:

Select

; Всё что ниже, буде делаться если скрипт был запущен с каким либо параметром

Case $CmdLine[0] <> 0

For $i=1 To $CmdLine[0]
Select
Case StringLeft($CmdLine[$i],5)="/url="
$url=StringTrimLeft($CmdLine[$i],5)

Case StringLeft($CmdLine[$i],5)="/txt="
$Text=StringTrimLeft($CmdLine[$i],5)

EndSelect
Next

; Пишу в файл преобразованные параметры (ключи) используя заданные для них переменные

FileWrite(@ScriptDir & "\test.txt", "Скопированный текст: " & $Text & @CRLF & "Текст был скопирован с этой странички: " & $url)

EndSelect


А команда для запуска из браузера такая:

Execute program, "Test.exe", "/url=%u /txt=%T"

В результате получаю файл с выделенным текстом (в момент вызова функции), и с адресом того документа, на котором было произведенно выделение текста\вызов функции.

Кстати, ты упустил символы $ у некоторых переменных CmdLine ;)

Sanja Alone
31-08-2006, 05:00
prokazzza
маленький скрипт на RAR SFX архив
;имя (или полный путь и имя) sfx-архива берем из ком. строки (если ничего нет - выходим)
If $CmdLine[0]=1 Then
$sfx=$CmdLine[1]
Else
MsgBox(16,'Ошибка',"Недопустимое содержимое командной строки",7)
Exit
EndIf

;пароль (если нужно считать из файла, тогда см. в строну ф-ций FileRead, FileReadLine, IniRead в зависимости от формата файла)
$password='Мой pass'

AutoItSetOption("WinTitleMatchMode",4)
;запуск
$pid=Run('"'&$sfx&'" -s')
WinWait('classname=#32770','.exe')
$handle=WinGetHandle("")
;вставить пароль
ControlSetText($handle,'','Edit1',$password)
;нажать извлечь
ControlClick($handle,'','Button1')
;подождать пока распакуется
ProcessWaitClose($pid)

;дальнейшие действия зависят от того, что запускается из параметра комментария Setup sfx-архива
MsgBox(64,'Готово','Файлы извлечены из архива')

Sanja Alone
31-08-2006, 05:11
Creat0R
Если порядок параметров строго определен, то можно не париться с доп. текстом.
Тогда "анализ" ком. строки будет выглядеть так:If $CmdLine[0]<>0 Then
$url=$CmdLine[1]
If $CmdLine[0] = 2 Then
$Text=$CmdLine[2]
EndIf
Else
MsgBox(16,'Ошибка',"Командная строка пуста...",7)
Exit
EndIfКоманда запуска из браузера так:
Execute program, "Test.exe", "%u %T"

Creat0R
31-08-2006, 17:11
Sanja Alone

можно не париться с доп. текстом.
Спасибо, действительно так проще.

Но у меня появилась немного другая проблема (на эту-же тему) - Дело в том, что если выделенный текст содержал кавычки (более чем две пары), то кавычки не попадают в файл. И ещё, если выделенный текст содержит кавычку, а затем пробел (в дальнейшем тексте, и именно в дальнейшем, не в предыдущем), то выдаётся сообщение с ошибкой выполнения сценария - Что мол переменная используется без того чтобы она была объявленна. А когда объявляю переменные, скрипт не выводит ошибок, но при таком случае (кавычка а затем пробел -> "текст ) вообще ничего не пишет в файл (кроме ссылки естественно). - Это лечится?


P.S:
Странно, но вот например, если выделить такой текст:

"Текст

То кавычка становится после слова (в файле):

Текст"

Sanja Alone
01-09-2006, 03:57
Creat0R
кавычки не попадают в файлПри передаче AutoIt-скрипту текста в кавычках из ком. строки, обрезаются первая и вторая кавычки, а текст внутри них считаеся одним параметром, НО! если за второй кавычкой вплотную идет текст, то и он "приклеивается" к содержимому текущего параметра (возможно, это ошибка разработчиков AutoIt). Пробелы вне этих кавычек являются разделителями параметров ком. строки.

Например, если в ком. строке скрипта я напишу:"Hello, Остап Ибрагимович. Вы являетесь работником фирмы "Рога и копыта"?", то получу при разборе строки 3 параметра:
1 - "Hello, Остап Ибрагимович. Вы являетесь работником фирмы Рога"
2 - "и"
3 - "копыта?"Можешь это легко проверить при пом. такого тестового скриптика:
For $i=1 To $CmdLine[0]
Msgbox(0,"Параметр "&$i,'<'&$CmdLine[$i]&'>')
NextТ.о., если ты хочешь не потерять какой-то части текста, то должен анализировать полное содержимое ком. строки - $CmdLineRaw. А в этом сл., удобнее будет использовать первый вариант передачи параметров скрипту - "/url=%u /txt=%T"

P.S. Можешь еще попробовать побороться с буфером обмена. Похожая на твою задача была в старой теме - я решал ее вот так (http://forum.oszone.net/showpost.php?p=381833&postcount=257)




© OSzone.net 2001-2012