[Архив - Часть 1.3] AutoIt скрипты
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. Помогите пожалуйста. Нужен маленький скриптик для решения некоторых рутинных задачь. Вот что нужно сделать последовательно: 1) в папке DIR1 находим и удаляем файлы в названии которых присутствует text_1 2) в папке DIR2 находим xxx.sif и удаляем строки, в которых присутствует text_1 3) в папке DIR3 находим xxx.inf и добавляем в его секцию [XXX] несколько строчкек (text_2, text_3, ..., text_n) 4) в папке DIR4 находим yyy.inf ищем в его секции [YYY] text_4 и заменяем его на text_5 5) сохраняем все изменения и выводим отчёт о проделанной работе :-) Заранее благодарен. |
biork
п.п.1-4, точно в соответствии с формулировкой (см. примечания): Код:
#include <File.au3> - INF-файл не просто текст, поэтому корректней говорить о переопределении параметров секции, а не "замене текста"; - соответственно, по п.4 возможно имелась ввиду замена строк целиком, а не вхождений текста; - секции могут не отличаться от INI-файлов, в этом случае можно задействовать встроенные ф-ции AutoIT INI*. |
2Creat0R
Не совсем так,точнее совсем не так :) Дать ссылку на картинку(системную,т.е на ту которая находится в системе по умолчанию,например в папке system32) это легко. Мне надо чтобы картинка интегрировалась внутрь скрипта,с расположением которое ей указано и всегда была там,независимо от того есть такая картинка в системе или нет. |
Вложений: 1
amel27
Большое спасибо. Ошибочка выпадает (см. файл) ... и что такое? Код:
#include <File.au3> |
biork
Цитата:
|
amel27
С пользовательскими функциями разобрался. Пришлось, всего-лишь, переустановить AutoIt... Что касаеися самого скрипта: 1) Удаление файлов в заданном каталоге по маске - работает! 1.2) Возвращает количество удаленных файлов - где и как посмотреть? 2) Удаление строк файла по условию вхождения заданного текста - работает! 2.1) Возвращает: 1 - успех, 0 - ошибка. Коды ошибок - так же не знаю где их увидеть. 3) Добавление заданного массива строк в секцию INF-файла - не работает... 3.1) Возвращает: 1 - успех, 0 - ошибка. Коды ошибок - очень хотелось бы их посмотреть... 4) Замена текста в пределах заданной секции INF-файла - не работает... 4.1) В чём ошибка - так же не видно... Я понимаю, что всё от криворукости... но всё же? :-) Ещё вопрос: строки text_2, text_3, text_n, а так же text_4 и text_5 содержат всякие знаки припинания (запятаи, кавычки, скобки и пр.). Может, нужно принимать какие то дополнительные меры, что бы всё это правильно было интерпритировано? в 4 пункте, действительно можно бы было не менять текст, а изменить значение параметра. |
А нет ли для AutoIt какой-нибудь рисовалки форм?
А то очень долго координаты с "дизайн-макета" списывать.. |
biork
Цитата:
Код:
; ... Цитата:
|
amel27
Код:
1 - переданный параметр не является массивом; |
biork
Извиняюсь, очепятку исправил... |
amel27
Цитата:
В связи с этим есть вопрос: Что в функции нужно поменять, чтобы вместо открытия фалов, был выбор каталога (FileSelectFolder), и также хотелось бы чтобы была функция сохранения файлов (FileSaveDialog) - Буду очень благодарен если поможешь с этими функциями... И ещё (не принципиально) - при выборе файлов, возможно сделать массовый выбор? т.е чтобы можно было выбирать несколько файлов. -------------------------------- По поводу самого гуи, я немогу понять одной вещи - чтобы создать гуи, необходимо построить цикл, но на сколько известно, безпрерывный цикл “заставляет” сильно загружать ЦП... т.е если мы сделаем такой цикл: Код:
While 1 Просто дело в том, что хотел сворачивать скрипт в трей, затем в трее вывести меню, но если ставлю задержку в цикле скрипта (для трея), то пункты в трее не срабатывают, а если не ставить задержку, то процессор сильно грузится (бывает до 80-90%) - Как это решить? |
Michail77
Цитата:
Для установки файла исользуй такую команду: Код:
FileInstall("Полный\путь\к\изображению\для\установки\image.png", "Путь\куда\будет расспаковано\изображение\image.png", 1) Код:
GUICtrlCreatePic("Путь\куда\будет расспаковано\изображение\image.png",0,0, 300,40) |
Creat0R
Цитата:
Насчет: While 1 Sleep(100) Wend (применительно к другому случаю) сам бы хотел знать, какую оптимальную задержку выставлять. Yozhegg Цитата:
|
2 Creat0R
Спасибо,всё получилось :))) |
All
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki. |
Sanja Alone
Слушай помнишь ты давал мне вот такой скрипт, я тут не нашел куда вставить имя rar архива и что будет если убрать из скрипта строчку ProcessWaitClose('INSTALL.exe') она мне не нужна. Код:
If $CmdLine[0]=1 Then |
Vadikan
Цитата:
Далее - где-то надо обсудить какие сабжи и в какой форме нужно выносить на WIKI, все-таки выдернуть скрипт из контекста обсуждения не так просто - придется приводить его к более универсальному виду, добавить комментарии, поработать с именами переменных. З.Ы. Либо я еще не понял WIKI либо одно из двух, но без древовидной структуры от категорий мало толку. |
amel27
Я извиняюсь, уже, наверное жутко надоел, но... ...скрипт ни как не может найти секцию... может с синтаксисом чего? Код:
$ret = _InfSectionAddLines ($DIR1 & '\' & 'HIVESYS.INF', 'AddReg', $Lines) Код:
$ret = _InfSectionReplaceText ($DIR1 & '\' & 'HIVESFT.INF', 'Strings', $text_4, $text_5) |
Creat0R
Цитата:
Цитата:
biork файл и путь в личку |
amel27
Можешь доделать вот такой скрипт, я тут не нашел куда вставить имя rar архива и что будет если убрать из скрипта строчку ProcessWaitClose('INSTALL.exe') она мне не нужна. Код:
If $CmdLine[0]=1 Then |
VelDmi
Цитата:
|
1.Как сделать чтобы после 1 января нельзя было запускать, допустим, некий файл Test.exe?
2.Как следать чтобы выезжал диск из CD-Roma? |
VelDmi
Цитата:
Цитата:
Цитата:
amel27 Цитата:
Ещё раз Спасибо, очень выручил :) TERMINAL Цитата:
Код:
$Proga = "test.exe" Но можно например в этот день, создать файл, и упрятать его куда нибудь подальше, а ещё лучше, запись в реестре, и тогда можно будет проверять уже не дату, а существование файла\записи в реестре... примерно так: Код:
$Proga = "test.exe" prokazzza Цитата:
Цитата:
|
Yozhegg
Цитата:
prokazzza Цитата:
TERMINAL1. 1 января какого года? При условии, что Test.exe это AU3-скрипт: Код:
#Include <Date.au3> |
Yozhegg
Цитата:
|
VelDmi
Цитата:
prokazzza Цитата:
|
Всем здравствуйте!
amel27 Спасибо за помощь, только теперь, соотвественно, вопрос, а как удаленно разблокировать рабочий стол? (Это к вопросу о работе скрипта, если к ПК не подключен монитор) |
Вопрос для настоящих знатаков:
создаю AutoIT скрипт, который автоматически создает VPN подключение (эта часть поддалась без проблем) и потом его настраивает(прописывает IP,DNS и прочие настройки в свойства адаптера). Вопрос: Как открыть свойства конкретного сетевого подключения(в моем случае это VPN) и как связать это с autoIT. заранее всем спасибо. |
desperate
У меня сделано через netsh interface, если нужно подробнее попозже напишу. |
VelDmi
буду очень благодарен и думаю другим это тоже будет интересно. |
Да забыл указать самое главное, мне надо не только вкладку Сеть -> свойства TCP/IP настроить, но и другие параметры, шифрование, WINS и проче.... вообщем пройтись по всем вклдкам свойств определенного адаптера (т.к. VPN создается для работы с провайдером спутникового интернета)
|
Creat0R
Цитата:
- новый флаг: 32 = Hide places bar (не отображать панель с иконками); - новый параметр: Default Extension (если пользователь не вбил расширение, то автоматом добавляет указанный); - новый параметр: HWND головного окна GUI (из-за чего собственно весь сыр-бор). Код:
Func _FileOpenDialog ($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefaultFile = "", $sDefaultExt = "", $mainGUI = 0) |
Код:
$ip = '192.168.100.' & $ComputerNumber |
Первый запуск netsh.exe нужен для того, чтобы выяснить имя сетевого интерфейса, т.к. оно может изменяться.
Второй запуск уже устанавливает для подключения необходимый мне ИП, gateway и проч. |
VelDmi
хороший скрипт, спасибо, но как настроить остальные параметры шифрования,Wins и прочих на других вкладках окна свойств??? |
biork
Цитата:
Код:
Func _FileReadUnicodeToArray ($sFilePath, ByRef $aArray) |
desperate
Цитата:
Код:
Чтобы получить справку по команде, введите эту команду, |
VelDmi
без вариантов, не получилось с помощью netsh настроить все параметры. Поэтому мой вопрос по поводу автоматического открытия Properties определенного сетевого подключения остается открытым. |
desperate
Цитата:
|
Снимаю свой вопрос, проблема решиласт сама собой, когда набрел на форуме а статью про автоматическое создание dial-up соединения.
у кого будет подобная проблема пишити в личку и тогда создам отдельный топик, в котором будем развиваться и совершенствоваться. |
desperate
Цитата:
|
amel27
Огромное спасибище! Всё работает! |
Извините пожалуйста, а существует ли такая команда с помощью которой можно было бы закрыть определенное окно!
Например я сделал так что при открытии моего диска(autorun)он сначало записывает мой шрифт в директорию %windir%\Fonts и Я сделал так поместил explorer.exe в директорию диска и написал в cmd файле %CDROM%\Autoplay\explorer.exe %windir%\Fonts Это мне нужно чтобы он открывался А как сделать так чтобы она вслед за этим закрывалась автоматически Пожалуйста напишите мне |
А можно ли средствами AutoIT (навеоняка можно, только придумать не
могу как) удалить файл с фиксированным именем во всех неопределенных деррикториях - имена, количество, уровни которых заранее неизвестны? Допустим имеем файл который надо удалить - 1.txt Имеем каталог в котором его надо удалять - 2 И вот в этом то каталоге может быть любое количество каталогов, подкаталогов, подподкаталогов - какие - не понятно, имена их - не известно, количество - то же, уровней вложения - тем более. Мозг опухают - в хелпе пока ничего не смог отыскать. |
amel27
Цитата:
Есть вопрос - а можно чтобы вместо (как опция) прикрепления гуи, можно было также прикреплять любое другое окно (по его заголовку)? P.S При разукрашивании скрипта, если поставить Send("{...}") то скрипт ругается на неопознанные стили, а точнее, это если только есть кривые круглые ораньжевые скобки :) Heaven Цитата:
Цитата:
DenchikK Цитата:
Код:
|
Creat0R
Извините пожалуйста за глупый вопрос - скопировал скрипт в файл au3, переписал в тот каталог откуда запускаю - 2 файла include. Запускаю - а мне выдается ошибка - Error: Unknown function name. на строчке Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2) |
DenchikK
проверь наличие в заголовке скрипта строчек: Код:
#include <File.au3> Цитата:
Цитата:
|
amel27
Есть эти строчки - один в один все как указано у Creat0R |
DenchikK
Цитата:
|
Цитата:
Цитата:
Добавлено: Нашел в скрипте Sanja Alone функцию _FileListToArray и поместил её в файл \Include\Array.au3 (ибо этой функции ни в одно файле каталога \Include не было), вот код: Код:
Func _FileListToArray($sPath, $sFilter = "*", $iFlag = 0) Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2) Local $i, $j, $rlist[1] ERROR Error: No virriable given for "Dim", "Local", "Global" or "Const" statement. |
Всем привет!
Поможите, кто может. Задача простая. Необходимо периодически на удаленном компьютере (под Unix) выполнять ряд команд с дальнейшей обработкой выводимой в консоль информации. Хочу использовать для этого строку $t=Run("telnet","",@SW_HIDE,3) и далее при помощи StdinWrite, StdoutRead работать с открытой консолью. Но почему-то процесс telnet.exe закрывается сразу же после запуска. Где ошибка? |
amel27
Цитата:
Цитата:
mpn Цитата:
Попробуй перед запускам сменить рабочий каталог FileChangeDir("путь\к telnet.exe\"), или указать путь в самой сроке запуска... Код:
$t=Run("telnet.exe","путь\к telnet.exe\",@SW_HIDE,3) Код:
$t=Run("путь\к telnet.exe\telnet.exe","",@SW_HIDE,3) Пиши скрипт так, и ненужно никаких Include ;) : Код:
$Path = @ScriptDir & "\2" |
amel27
Цитата:
Цитата:
Цитата:
:( |
Creat0R
Уже перепробовал все варианты. При этом, если если вместо telnet поставить, например, cmd - все работает. |
Creat0R
Спасибо большое, но всё равно ошибка выдается: Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2) Local $i, $j, $rlist[1] ERROR Error: No virriable given for "Dim", "Local", "Global" or "Const" statement. |
mpn
Цитата:
Код:
FileChangeDir("Путь к проге") Цитата:
|
Creat0R
Цитата:
Цитата:
Всё, спасибо! Заработало! Зашел на сайт - а там версия новее. Скачал - всё замечательно! Ещё раз спасибо! |
Creat0R
Пробовал и с командной строкой. При этом первым запускается процесс cmd.exe, именно он становится доступным для ввода/вывода (последний параметр в команде run =3). Запускающийся следом telnet.exe не принимает команды, отправленные при помощи StdinWrite, даже при правильно указанном PID. Поясню еще. Программу необходимо запускать в т.ч. и ночью на заблокированном компьютере. Поэтому использование send, отправляющей символы в активное DOS-окно, отпадает. Различные Control.. не работают с такими окнами. Пробовал вместо telnet запускать hyperterm.exe, но при его закрытии (на заблокированном ПК) Windows ругается: "...неизвестная ошибка...", и больше его запускать не хочет. Использование экзотических терминальных программ ограничивает мобильность скрипта. Выход где-то должен быть! |
Creat0R
А можно Вас ещё побеспокоить? Никак не могу изменить скрипт так, чтоб удалялись несколько файлов, и с нескольких путей. Приходится для каждого файла и каждого пути писать отдельный скрипт, при компиляции каждый скрипт начинает весить 180 kb, и несколько - уже весят за 2 мегабайта! Заранее спасибо! |
mpn
А утилиту telnet пробовал ставить в тот же каталог вместе со скриптом? (или наоборот, скрипт в ту папку в которой telnet) - может что-то блокирует запуск программы? файрвол? какие то другие ограничители доступа в сеть? DenchikK Цитата:
Код:
$Path = @ScriptDir & "\имя другого каталога" Код:
Func _DeleteFileInFolders($FileName, $Path) Код:
_DeleteFileInFolders("File1.txt", "C:\Dir1") P.S Функцию поместить в конец скрипта (после трёх существующих функции - _FileListToArray, _ArrayAdd и _DirListToArray). |
Переделал немного функцию для удаления файлов из подкаталогов, чтобы она ещё возвращала значения...
если все файлы были найдены, то возвращается сообщение о том что всё прошло успешно, если какого-то файла не удалось удалить, то возвращается список тех файлов которых не удалось удалить :) - если каталоги небыли найдены, или сам путь не сущестсвует, то также возвращается сообщение об ошибке. P.S. Хотелось бы узнать, как можно построить функцию так, чтобы возвращалось значение в массиве (через _ArrayAdd полагаю), я пробовал сделать, но у меня почему то возвращается только первое значение (из $Results[1]) - если кто-то может показать как правильно строить массив на примере с этой функцией (для удаления), то буду очень признателен. Код:
$Results = _DeleteFileInFolders($FileName, $Path) |
Доброго времени суток!
Интересует следующее - можно ли при помощи AutoIt скрипта сделать следуюющее. Пользователь входит в систему, появляэтся переменная окружения %USERNAME%=zzz_aaa, где zzz - группа пользователя, aaa - инициалы пользователя. Нужно получить только группу пользователя, и ввести в систему новую переменную set USERGROUP=zzz. Вопрос каким образом можно взять из имени пользоваетля только группу. Спасибо. З.Ы. Имя пользователя находится в актив директори. |
Sla8ak
Цитата:
Код:
$SplitUserName = StringSplit(@UserName, "_") |
С помощью какой команды можно переименовывать файлы!!? Например wgatray.exe в wgatray.exe.old.
|
sattva
Цитата:
Код:
FileMove("wgatray.exe", "wgatray.exe.old") ----------------------------------------- У меня есть такой вопрос: -Возможно ли в GUI, построить реальную ссылку, на которую можно было бы нажать, и она открывалась в браузере (желательно чтобы был выбор с каким браузером запускать)? |
Доброго времени суток.
Интересует следуюющий вопрос: каким образом при помощи AutoIt-скрипта можно перенаправить (переназначить) папку "Мои документы" в другое место, например на сетевой ресурс. Заранее спасибо. |
Vadikan
Как конвертировать в код AutoIt v3 вот такой CMD скрипт? Будь добр, приведи код готового скрипта. Код:
FOR %%I IN (C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO IF EXIST %%I:\PROG.EXE SET path=%%I:\;%path% |
Sla8ak
Цитата:
Код:
$NewMyDocsPath = "C:\MyDocs" Цитата:
Код:
$AllDrivesVar = DriveGetDrive("all") |
есть скрипт autoit_KIS.exe .для запуска нужен еще и AutoIt3.exe ? или скрипт сам по себе?
|
bes1de
Цитата:
|
Creat0R
Спасибо, буду пробовать. |
Creat0R
Код:
$AllDrivesVar = DriveGetDrive("all") Подскажи как точно нужно написать скрипт. Я то в этих скриптах ни бум-бум. |
Djons
Цитата:
Код:
$AllDrivesVar = DriveGetDrive("all") Последняя строка предназначена для обновления переменных сред. |
помогите, пожалуйста такая проблема автоит версия 3,2
пытаюсь эмулировать клики мыши по касперскому 5 Код:
WinWaitActive("Антивирус Касперского Personal", "Настройка") |
S377
Используй AutoIt Window Information Tool (Aut3info.exe) чтобы определить заголовок окна, его текст, и класс кнопки ( ClassNameNN: ) на которую нужно нажать. Также учти, заголовок окна (и, наверное текст), чувствителен к регистру, попробуй ставить в начале скрипта Opt("WinTitleMatchMode", 4) . |
использую AutoIt Window Information Tool (Aut3info.exe)
но она чтото часто гонит может изза того что в виртуальном компе отлаживаю скрипты видимо в виртуальном компе и добром ControlClick не работает? что скажете по этому? и еще можно сделать клик мыши (координаты мыши ОТНОСИТЕЛЬНО ОКНА) ? |
S377
Цитата:
А в начало скрипта такую строку нужно ставить: Код:
Opt("MouseCoordMode", 0) ;или вместо 0 -> 2 - тога будет относительно клиентским участкам окна |
Благодарствую за совет!
не знал про: Opt("MouseCoordMode", 0) ;или вместо 0 -> 2 это очень удобно |
Хотел спросить, можно ли такое осуществить на примере установки
соединения и настройки модема. А именно - список установленных модемов как я поонимаю, сортируется по алфавиту. Предугадать заранее, на каком месте он окажется, разумеется не возможно. Можно всё таки как то установить курсор на нужный мне модем (тот, который заранее знаешь как называется)? Список модемов в "Телефонах и Модемах" определяется как SysListView322, при установке соединения - SysListView321 |
Creat0R
Вот так работает: Код:
For $i = 1 to $AllDrivesVar[0] |
1.У меня вопрос такой...
Можно ли в скрипте написать такую прогу которая будет определять дату записи диска (например, дата записи диска 30.12.2006 программой НЕРО) и если дата не соответствует то выполняется например перезагрузка машины а если дата соответствует, то выполняется к примеру старт файла SETUP.exe? |
Кто нибудь сталкивался с _GuiCtrlStatusBarGetText? оно не работает в GUI :(
Берём тот же пример из справки: Код:
opt("MustDeclareVars", 1) Как получить текст из статус-бара? |
Поздравляю Всех С Наступающим Новым Годом!
Я тут написал небольшую функцию, возможно кому ни-будь она пригодится... Код:
; Преобразовывает десятичное число в другие системы счисления |
Обратное преобразование в десятичное число.
Код:
; Преобразовывает числа из различных систем счисления в привычные нам десятичные |
Всех с новым годом!
Вопрос опять по гуи (непомню задавал ли уже, по поиску вроде не нашел)... Возможно ли внедрить ссылку в гуи? т.е чтобы был подчёркнуты текст как ссылка, и при нажатии выполнялось какое то действие (запуск браузера с ссылкой - но это я знаю как сделать). |
Creat0R
Можно внедрить целую HTML страницу: Код:
#include <GUIConstants.au3> Код:
#include <GUIConstants.au3> |
Diamond_m
Цитата:
|
Вопрос знатокам AutoIt:
как при помощи этой программы изменить права доступа NTFS к отдельному файлу (в WinXP естесственно)? |
biggreeder
Цитата:
|
Sanja Alone
А можно "по-пензенски"? Как конкретно команду прописать, чтобы запретить запись "C:\Путь_к_файлу\Имя_файла" для групп SYSTEM и администраторы? |
biggreeder
Цитата:
Код:
cacls "C:\Путь_к_файлу\Имя_файла" /E /G SYSTEM:R Администраторы:R Код:
RunWait(@comspec & ' /c cacls "C:\Путь_к_файлу\Имя_файла" /E /G SYSTEM:R Администраторы:R','',@SW_HIDE) |
Sanja Alone
Спасибо, думал я не так что-то делаю. Но именно такие команды на срабатывают. В смысле права доступа остаются прежними. И разные варианты команд пробовал и разные файлы. Ничего не помогает... :( |
Как можно деактивировать гуи (GuiSetState(@SW_DISABLE)), но чтобы можно было перетаскивать окно (через заголовок)? или хотябы как деактивировать элементы гуи (кнопки, поля ввода и т.д.), но чтобы они не затемнялись, а в обычном их виде были недоступны для использования?
|
Creat0R
Цитата:
Ведь если запретить обработку событий ВСЕХ кнопок и элементов то это и будет по сути заблокированное GUI. В функции которая обрабатывает событие кнопки надо поставить условие: Код:
Dim $zapret=False |
Diamond_m
Цитата:
И даже если и подойдёт такой ввариант, у меня слишком много чекбоксов в гуи (более 30-ти), и ставить их всех на условия не очень практичное решение... хотелось бы просто заблокировать элемент (чекбокс к примеру), и чтобы небыло возможности зажать галку, но и вид чтобы оригинальный оставался. Я думал что может есть какой то стиль который это делает, но в справке уже замучался искать :( Спасибо за попытку помочь... но мне кажется моей задумке (как и многим другим моим задумкам :) ), в AutoIt'е просто нет решения :( |
Creat0R
Цитата:
Код:
#include <GUIConstants.au3> |
Diamond_m
Цитата:
Может можно как то блокировать доступ клавиатуры именно в гуи (BlockInput() не предлагать :) )? |
Creat0R
Сначала я решил что дело только в стиле кнопки $BS_DEFPUSHBUTTON, который я вставил умышленно для удобства тестирования. К сожалению о пробеле и TAB я не подумал. :sorry: А что если в функцию CoverGui() после условия Else добавить строчку: ControlFocus("TestCover","",$cover) а в шапке добавить: HotKeySet("{TAB}","nul") где nul() это пустая функция которая ничего ни делает (её так-же придётся дописать). Это сработает! Минус только в том что мы получаем неработающую клавишу {TAB} в системе. Ну и конечно убрать стиль: $BS_DEFPUSHBUTTON с кнопки, чтобы ее нельзя было нажать с помощью ENTER. |
Creat0R
Ещё проще... Ничего в шапке писать не надо, потребуется только изменить функцию. Это хотя бы позволит отключить {TAB} только на момент блокировки GUI. Код:
Func CoverGui() |
Diamond_m
Цитата:
Ладно, ничего не поделать, придётся деактивировать "некрасиво" ;) ($GUI_DISABLE - или 128). Есть у меня друга задумка, но она тоже не работает :( - нужно поставить прогресс бар, и потом отменить его... вот гуи, и не пойму почему не работает такая конструкция: Код:
Opt("GuiOnEventMode", 1) |
есть ли у кого нибудь красивое решение установки alcohol120 а потом сразу lingvo11?
так как пока что у меня все это выглядит достаточно сложно и некрасиво... :( запускаю autoit скрипты из wpi 5.6, который в свое очередь стартует из RunOnceEx.cmd который стартует с CD... надеюсь про запуск строчка будет понятна :) вот как сейчас это работает у меня: скрипт alcohol120 отрабатывает, а потом команда %reboot%, wpi перезагружает комп, я наивный думал что потом продолжится установка alcohol120, и только затем стартанет lingvo11, но нет, wpi запускается раньше и не дает закончить установку.... конечно можно сделать в 3 строки, что-то типа: alcoho120.exe (без добавления в автозагрузку скрипта после перезагрузки) %reboot% alchol120.exe (скрипт закончит установку) и потом начнется установка lingvo11, скрипт lingvo11 первым делом запустит установленный alcohol и даст ему секунд 5-10 для создания виртуального CD, после чего alcohol будет закрыт, а установка lingvo11 продолжена... но мне кажется есть решение проще и красивее, нет ни у кого идей? |
Creat0R
Ты наверное заметил что во время работы цикла также недоступна обработка системного события (т.е. Выход из GUI). Я думаю, единственный путь привязать функцию к основному циклу. Может кто-то считает по другому? :) Код:
Opt("GuiOnEventMode", 1) |
Diamond_m
Цитата:
НО!, ах это "но"... Проблема в том, что основной цикл не удобно использовать, у меня на кнопку старта, повешаны многие операции (функции, и статус бар ещё). Т.е запускается скрипт, нажимаем кнопку Старт, пускается по событию функция кнопки, в этой функции существует цикл, т.е в самом конце цикла происходит выход с него ExitLoop (обязательно), и мне нужно сделать так, чтобы в процессе выполнения всего этого цикла (показа статус бара, прогресс бара, выполнения разных функции и т.п), можно было нажать на кнопку "Аборт", и тогда должен происходить выход из цикла (не закрывая программу) - а точнее, должно выводиться сообщение с вопросом, мол хочет ли юзерь прервать операцию, и если ответить положительно, то выходим из цикла, если отрецательно, ничего не делаем, продолжаем с того же места на котором была нажата кнопка "Аборт" (тот же "Старт" переименованный)... Нужно каким то образом, заставить вызвать событие (функцию) из самого цикла, преостановив этот самый цикл... В приведённом тобой примере, функция которая вызывается по нажатию кнопки, как бы вызывается без прерывно, т.e постоянно начинается с начала, а мне нужно чтобы начало функции не происходило, при нажатии на "Аборт" просто приостанавливалось её (функции) выполнение. Кстати, вот если не убирать иконку в трее, и оставить её функциональность по умолчанию, то при нажатии на неё появяется меню, там можно выбрать пункт Script Paused, и скрипт полностью преостанавливается - вот может можно как то точно также имитировать подобную паузу (вызвать функцию во время паузы)? P.S Надеюсь не запутался в объяснениях, просто уже голова пухнет от того что не могу никак сообразить, как решить эту, кажется простую задачку. :wacko: |
ВО! такой вариант работает по нажатию на горячую клавишу (Ctrl S), почему же событие не срабатывает при нажатии на кнопку? :idontnow:
Код:
Opt("GuiOnEventMode", 1) |
Creat0R
Цитата:
|
Всем привет! Помогите новичку.
Вообщем возникла такая проблема. Мне нужно заменить один текст внутри exe файла, на свой. Ну например, текст: This program cannot be run in DOS mode Заменить на текст: <----------------AutoIT RuleZ----------------> Я пытался использовать вот эту функцию: Код:
Func ReplaceText($FileNameT, $OldText, $NewText) Я также пытался, передавать ему не простые строки текста, но и в HEX, Binary формате (BinaryString), всё равно не может ничё сделать. На офф, форумах AutoIT нашёл функции BinaryWrite/BinaryRead, но так и не смог в них разобратся. Не могли бы вы помочь мне, в реализации моей затеи, желательно с примерами. Спасибо. |
Diamond_m
Цитата:
|
Creat0R
Цитата:
|
RemoteAdmin
Цитата:
Могу предложить такой вариант на функцию замены текста в файле: Код:
Func ReplaceText($FileName, $OldText, $NewText) Цитата:
|
Написал две примитивные функции - Одна предназначена для не совсем точного подсчёта скорости закачки (по InetGet), а друга на основе этой скорости закачки высчитывает сколько времени осталось до окончания (в секундах)...
НО! я полагаю что есть более точное решение этой задумке, ведь по идее, должны учитываться не просто полученные данные в интервале одной секунды, а ещё и скорость модема, скорость отдачи на сервере и т.п... вот как бы всё это расчитать, и построить точную функцию для подсчёта скорости закачки и оставшееся время до окончания? :idontnow: Вот эти две функции и пример их применения: Код:
;Заносим в переменную $URL ссылку на закачку. P.S. Если файл около 2-ух 3-ёх MB, то функции подсчитывают довольно точно, но если речь идёт уже о 5-ти и более MB, то счётчик начинает показыать результаты в хаотичном порядке. |
Привет народ... Я в этом деле новичок, но мне нужно сделать автоматизацию не из самых простых (как для меня) :) Вообщем помогите плиз чем сможете... Что собственно нужно:
Есть кейген... 1) Нужно его запустить (сделал) 2) Нажать на кнопку Generate (не получилось, но это впринципе не обязательно) 3) Скопировать текст(ключ), который он выдал (тоже непонятно) 4) Затем создать новую запись в реестре по заданному мной пути (ну в данном случае это HKEY_LOCAL_MACHINE\SOFTWARE\Electronic Arts\EA Games\Battlefield 2\ergc) 5) Создать там параметр со стандартным именем (строковый, REG_SZ) 6) Изменить его значение на такое - x9392тотсерийникбезчёрточек вот собственно и конец... Если никто не сможет помочь по каким либо причинам то расскажите хотя бы как делать вышеперечисленные операции :) Заранее спасибо !!! |
timon_90
Для начала, прочти FAQ 2). Пункт 7 раздела Вввод данных / работа с элементами управления FAQ - ф-ция ControlClick(); 3). Ф-ция ControlGetText(); 4,5,6). Пункт 2 раздела Импорт данных из reg-файла в реестр FAQ - ф-ция RegWrite(). Заменить черточки пустотой - StringReplace("серийник с черточками","-",""). P.S. Во многих моих скриптах выполняются подобные действия - используй их в кач-ве примера (посмотри скрипт для Alcohol, FR7, SoundForge 6 и др.) |
Сенк большой!) Если будет чёто не понятно то напишу)
|
Для тех кто хочет использовать трекерную музыку в проектах AutoIt.
Трекерная музыка фактически не загружает CPU и из-за её малых размеров, пользуется популярностью программистов при написании кейгенов, кряков, трайнеров, а также инсталяторов. Для проигрывания трекерных модулей в AutoIt я использую библиотеку BASSMOD.dll. BASSMOD.dll (не путать с bass.dll) можно скачать c оф. сайта http://www.un4seen.com весит 33,5 КБ Много трекерной музыки можно найти на сайте http://www.keygenmusic.net а также на http://www.websound.ru Размещаем в папку \AutoIt3\Include\ скрипт(bassmod.au3) следующего содержания: Код:
#include-once BassMod($dllPath,$sPath,$flag) $dllPath - Путь к BASSMOD.dll (Если в качестве пути указать (-1 или "") функция поищет BASSMOD.dll в текущем директории а также в путях определённых для системной переменной %path% ) $sPath - Путь к трекерному модулю $flag - Метод обработки (см. предыдущий код: Music flags) BassModClose() - закрывает BASSMOD.dll и выгружает музыку из памяти (Эту функцию следует вызывать при выходе из GUI) Пример использования: Код:
#include <GUIConstants.au3> |
Diamond_m
Спасибо! давно искал подобное решение - оно позволяет проигрывать мелодию в фоновом режиме, и многое другое... Примечание и вопрос: Примечание - Если путь к BASSMOD.dll не указать полный (просто "BASSMOD.dll"), то мелодия не играет. Это можно исправить изменив немного первое условие функции BassMod, и добавив после него такую строку: Код:
If StringRegExpReplace($dllPath, "^.*\\", "") = $dllPath Then $dllPath = @ScriptDir & "\" & $dllPath Код:
If $dllPath = "" Or $dllPath = -1 Then $dllPath = @ScriptDir & "\BASSMOD.dll" -Я в системной папке нашёл файл BassMod.dll, возможно ли как то использовать его? |
Creat0R
Цитата:
Цитата:
Я считаю что лучше указывать полный путь, чтобы уж знать наверняка, что играет правильный BASSMOD.dll. P.S. Скорее всего какая нибудь программа временно извлекла BASSMOD.dll для одноразового проигрывания музыки, а в последствии не стала его удалять. Лично я считаю такое поведение некорректным для программы, поскольку это засоряет системную папку. Вот ещё вариант для скомпилированного скрипта с применением FileInstall() (по крайней мере как это вижу я) Все ресурсные файлы извлекаются в @TempDir только после запуска окна справки, а после его закрытия сразу удаляются. Код:
#include <GUIConstants.au3> |
AutoIt, "защита от пользователя", как?
Добрый день.
Проблема такая. Некоторые пользователи любят во время установки программ крутить и тыкать во все стороны мышью :) У меня довольно много программ настраиваются при помощи скриптов автоит. Пользователи от этого офигевают - мышка сама ездит :) Вобщем нужно на время установки запретить использование мыши и клавиатуры. Кто-нибудь делал так? Как это можно реализовать? |
nadge все вопросы по AutoIt задавайте пожалуйста в соответствующей теме http://forum.oszone.net/thread-60616.html
Если почитать эту тему, то ответ на Ваш вопрос уже давно есть: Код:
;блокируем мышь и клаву Код:
BlockInput ( 0 ) |
Цитата:
Спасибо за ответ. |
Хотел было спросить, как переделать функцию для поиска в файле, чтобы искать можно было исключительно слово целиком (Match whole word only), но сначала решил немного поковыряться в ней (функция от Sanja Alone), и на моё же удивление, у меня получилось это осуществить... :yes:
Не знаю пока корректный ли мой способ, но вроде работает: Код:
Func _FindTextInFile($iFile, $Text, $MtchWholeWrdFlag = 0, $CaseSense = 0) Немного переделал функцию, тепрь если искать кириллицу, то чувствительность к целому слову учитывается... но вот если проверять учитывая регистр, то для кириллицы не действует... также добавил в функцию 4-ты параметр, который определяет чувствительность к регистру букв. А также в начале функции поставил проверку на существование файла, если не существует, то возвращается -1. P.S. Если кто-то знает более правильный способ, или более эффективный, то буду рад узнать его ;) |
Никак не могу разобраться со всем что связанно с кодировками...
При проверке на существование файла, если проверяемы путь в кодировке UTF-8, и содержит кериллицу (русские буквы), то файл не найден, перекодировать то можно, но что делать если заранее не известно какая будет кодировка (путь к примеру берётся из файла конфигурации)? Можно ли написать функцию, которая будет определять кодировку строки? А таже проблема с отображением кодировки в гуи, если язык в системе не русский и не английски, то ни одна функция не помагает нормально отобразить кириллицу. Есть функция _Utf8ToAnsi() (от amel27), но она тут не помагает (помагает если системный язык русский), есть также функция StringToUTF(), и она тоже не помагает... как сделать уникальное отображение кириллицы в гуи, чтобы на любом языке (установленном в системе), нормально всё отображалось? |
написал скрипт на AutoIt для установки Office 2000.
серийник там в SETUP.INI никак не задается, поэтому серийный номер ввожу вот так: Send('FXWX9QCJ4FGHCRYH9Y8FXQP6G') но срабатывает это далеко не всегда. есть две проблемы: 1) если в винде язык по умолчанию - русский, то вместо латинских букв скрипт вводит в поле ввода русские: АЧЦЧ9 ЙСО4А итд, то есть те русские буквы, которые написаны на соответствующих клавишах. 2) иногда что-то протормаживает и вообще вводится мешанина из букв, как будто из этой строки Send('FXWX9QCJ4FGHCRYH9Y8FXQP6G') выбрали 7-9 букв, через каждые 2-3 буквы и разбавили их буквой "Ж", которой вообще по-идее там быть не может, ведь она соответствует на клавиатуре знаку ";" сейчас попробую сделать ввод серийника с помощью ControlSetText, но мне непонятно, почему так странно работает 'Send' если язык в винде по умолчанию задан русский? может подскажет кто-нибудь? спасибо. p.s. с помощью 'ControlSetText' вроде получилось, хотя учитывая непонятность работы 'Send' нет уверенности, что все и всегда будет работать корректно :( пока работает... |
i_mihal
Да, есть такая проблема... Я её решаю с помощью вставки из буфера обмена: ClipPut("FXWX9QCJ4FGHCRYH9Y8FXQP6G") Send("^м") Цитата:
Всем: Оказывается, с помощью WinApi можно проделывать интересные манипуляции с окнами... Анимация окон GUI, с помощью WinApi Использование: DllCall("User32.dll","long","AnimateWindow","hwnd",Идентификатор окна,"long",Продолжительность в миллисекундах,"long",Эффект) Эффекты: Эффекты имеет смысл задавать в качестве констант: Const $AW_ACTIVATE = 0x20000 AW_ACTIVATE = 0x20000 (Активирует окно, конфликтует с AW_HIDE) AW_BLEND = 0x80000 (Постепенное исчезновение-появление) AW_CENTER = 0x10 (Разворачивает окно из центра) AW_HOR_POSITIVE = 0x1 (Слева направо) AW_HOR_NEGATIVE = 0x2 (Справа налево) AW_SLIDE = 0x40000 (Прокрутка) AW_VER_POSITIVE = 0x4 (Сверху в низ) AW_VER_NEGATIVE = 0x8 (Снизу в верх) AW_HIDE = 0x10000 (Скрывает окно) Эффекты по умолчанию ориентированны на появление окна, для скрытия окна используйте их совместно с AW_HIDE. Можно получить интересные результаты комбинируя эффекты между собой. Например: 0x4 + 0x1 (анимация по диагонали) Рабочий пример: Код:
#include <Guiconstants.au3> |
i_mihal
ControlCommand вроде будет всегда срабатывать: Код:
ControlCommand("Title", "", "Edit1", "EditPaste", "FXWX9QCJ4FGHCRYH9Y8FXQP6G") Diamond Красиво! :UP: но рамка всего гуи как бы нарисованна, т.е углы не округлённые как должны быть в XP, даже немного затемнённые, это можно поправить? P.S Цитата:
|
:yahoo:
Оказывается, возможно привязать функцию _MsgBox() (от amel27), и любое окно гуи к другому окну (не обязательно к гуи).... На мысль меня навёл пример из Faq'а о переключении раскладки клавиатуры (а именно, пременная $hWnd): Код:
Opt("WinTitleMatchMode", 4) |
Creat0R
Цитата:
Цитата:
Спасибо, приму к сведению. :) |
Diamond
Цитата:
Цитата:
Цитата:
Вставляем так: ClipPut($CmdLine[1]) Если Ком. строка содержит кириллицу, то когда пытаемся куда то вставить текст из буфера обмена, то уже вставляется в неверном формате... кстати я даже не знаю как перекодировать его, кто знает плиз подскажите, давно хотел узнать :blush2: Т.е вот к примеру если такой скрипт закомпилировать: Код:
ClipPut($CmdLine[1]) Код:
Start ClipTest.exe тест |
Ещё один способ получить список существующих дисков на компьютере:
Код:
$Drives = "" |
Creat0R
Цитата:
|
Creat0R
Цитата:
Цитата:
graftabl 1251 | echo %username%>MyName.txt Хотя конкретно для твоего случая это не сработает. При создании пакетного Файла возьми за привычку конвертировать текст в Dos(oem), например c помощью текстового редактора: BRED - хороший заменитель блокнота, или любой другой доступный редактор который умеет работать с кодировками, в самом крайнем случае открываешь пакетный файл в WordPad ( > Сохранить как > Текстовой документ MS-DOS), а затем меняешь расширение на *.bat |
Creat0R
Цитата:
Вот ещё один способ, сделано через VBScript Код:
#CS |
VelDmi
Цитата:
Код:
Func _MsgBox ($mainGUI, $MsgBoxTitle, $MsgBoxText, $MsgBoxType) В первом параметре задаётся идентификатор гуи (как выяснилось можно и от WinGetHandle), во втором заголовок, в следующем текст, и в последнем тип (иконка, кол-во кнопок и т.д.)... Вот рабочий пример с этой функцией: Код:
Opt("WinTitleMatchMode", 4) P.S. Я когда то писал: Цитата:
Diamond Цитата:
|
Creat0R
Цитата:
|
Народ!
Я повторяюсь, но очень интересует ответ на простой вопрос: у кого нибудь выполняется корректно строка $f=Run("telnet","",@SW_MAXIMIZE,3) ? У меня, если ее выполнить без последнего параметра, открывается окно telnet, в противном случае процесс закрывается через 0,5 сек после запуска. AutoIt v.3.2.0.1. |
Цитата:
|
Creat0R
Пробовал через WinApi - kernel32.dll там вроде бы должна быть нужная функция... В общем совсем запутался - ничего не получается. :( Если у тебя проблемы только с Dos-кодировкой, то можно побить кракозябру её же собственным оружием. Код:
$ret="ЄхёЄ" |
Diamond
Цитата:
По поводу режима чтения из консоли (StdoutRead), если я ставлю 2 как последний параметр у команды Run, влияет ли это на то как будут выполняться команды ком. строки? т.е на что вообще это повлияет (кроме как на возможность чтения изх консоли)? |
Creat0R
Эта Функция в её текущем виде не предназначена для чтения из консоли, она задумана мной только для преобразования искажённого текста. Т.е я заставляю консоль испортить кирилический текст, как она это делает обычно, но только в нужную нам сторону. Но если ты хочешь использовать StdoutRead() непосредственно по назначению, т.е для чтения стандартного потока из консоли... Пример кода был взят из справки AutoIt v 3.2.2.0 $STDOUT_CHILD = 2 Необходима для получения StdoutRead() в первом цикле $STDERR_CHILD = 4 Необходима для получения StderrRead() во втором цикле Имена констант очевидно говорят об их предназначении (см. справка: StdoutRead и StderrRead) Константы влияют только на возможность чтения потока из консоли. При этом возможность сохраняется до тех пор, пока ты делаешь запросы StdoutRead(), вплоть до закрытия самой консоли. Код:
; Demonstrates StdoutRead() Исправляем этот недостаток заменой первой строки в коде: Код:
$foo = Run(@ComSpec & " /c graftabl 1251 | dir foo.bar", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) |
Как можно изменить функцию _ChooseColor(), чтобы можно было прикрепить окно выбора цвета к гуи?
Я пробовал в DllCall добавить параметр ..."hwnd", $Gui...., но функция ругается на сбой в скрипте и не хочет запускаться :( - возможно ли это как то решить? Diamond Цитата:
|
Три способа определить - является ли файл папкой:
P.S. Возможно, для многих это не новость, и всё-таки... Код:
;~ Путём получения атрибутов Цитата:
А всё-таки кракозябры были не связаны с буфером обмена или AutoIt. :no: А то, я уж чуть было не усомнился в эфективности способа который я предложил i_mihal :tomato: |
Здрасьте всем.
Вот история моей болезни: я написал батник для автоматической рассылки писем, когда он срабатывает, то появляеться окно аутглюк с предуприждением, что программа пытаеться сама отправить письмо и т.д.. На нужную кнопку в этом окне я нажимал скриптом Autoit. [code]Opt("TrayIconHide", 1) WinWaitActive("Microsoft Office Outlook") Sleep(6000) ControlClick("Microsoft Office Outlook", "", "Button4") Send("{ENTER}") Все работало нормально, но последнее время если компьютер заблакированн мой "нажиматель" не срабатывает, так как окно аутглюка стало теперь не активным. на писал такой скрипт: Код:
Opt("TrayIconHide", 1) Кто виноват? Что делать? |
Diamond
Цитата:
;Возвращает -1 если файл вовсе не существует, 1 если папка, и 0 если файл.... Код:
Func _IsDir($FileName) Цитата:
papik_bat Цитата:
У тебя второй пример весь держится на условии что “скрипт будет дожидаться” окна, попробуй опустить условие и ограничить дожидание: Код:
#NoTrayIcon ;Так надёжнее ;) |
Продолжаем беседу...
CreatoR Компьютер заблокирован = Ctrl+Alt+Delete -> Блокировка, либо когда блокировка включаеться автоматически. ПопробЫвал предложенный код, не идет... После разблокировки окно аутлука свернуто. |
Вот нашел описание команды которая могла бы, я думаю, решить мою беду WinRestore, но у себя в Autoit 3, ее не нахожу. Как быть?
|
papik_bat
Цитата:
Теперь (в 3.2.2) нужно так: Код:
WinSetState("Microsoft Office Outlook", "", @SW_RESTORE) |
CreatOR
Цитата:
Попробую пойти другим путем, не дам компютеру блокироваться написал скрипт Autoit "мышка летит на юг" :-)! Через каждые 10 минут мышка двигаеться в южном направлении. Просто отключить блокировку нельзя. |
Creat0R
Цитата:
Тот что на основе VBScript запрашивает напрямую ($fso.FolderExists() куда уж надёжней...). Там я сделал только одну поправочку. Дело в том что в VBScript, значение False понятно 0, а вот значение True = -1, поэтому я добавил Abs() для совместимости с AutoIt. Файл "nul" - неотъемлемый элемент папки и он никуда не денется, так что тоже можно пользоваться смело. :) |
Уважаемые, подскажите пожалуйста, может кто знает как реализовать на AutoIt v 3 следующее: (Что-то сам никак не могу придумать) 1. Как вызвать меню программы, которое вызывается только по клику правой кнопкой мыши на иконку программы в трее ? (Другого интерфейса программа не имеет...) Или как кликнуть нужную иконку программы в трее ? |
Respect
Цитата:
Код:
#NoTrayIcon Diamond Цитата:
А по поводу файла Nul, видимо он гинерируется (по крайней мере имитируется его присутствие) если существует файл с таким же имененм без расширения... Т.е к примеру, создаём файл Test в папке C:\ (без расширения), и проверяем является ли он папкой: Код:
$TestName = "C:\test" |
У меня есть такой вопрос:
-Возможно ли проверить функцию BlockInput()? т.е есть способ узнать, включена ли (или отключена) такая блокировка (от самого скрипта)? Мне нужно включить BlockInput(1), и в течении того времни пока всё заблокированно, проверять были ли нажаты клавиши Alt Ctrl Del (что и вызывает отключение блокировки) - или хотябы как проверить нажатие этих клавишь, _IsPressed не помагает, не получается проверить нажатие сразу трёх клавишь :( P.S. И ещё такой между прочный вопрос - почему в справке нет (у меня) описании команд StringRegExp, StringRegExpReplace? где можно почитать описания, и желательно примеры этих функции? может мне справка попалась бракованная? (она шла вместе с дистрибютивом AutoIt'а). |
Цитата:
координаты конкретной иконки будут однозначно отличаться !?... Вопрос № 2. Как определить какая в текущий момент раскладка клавиатуры RU or EN и как переключать раскладку клавиатуры, не применяя эмуляцию нажатия клавиш ? Наверняка не сложный вопрос, просто нет времени разбираться. Извините, если эти вопросы уже обсуждались в форуме. Хочется услышать именно ответы. Спасибо. |
Creat0R
Цитата:
AutoIt, AutoIt3, AutoIt3Help, и наконец UDFs3 - (User Defined Function). В первых трёх, есть описания этих команд (у меня). :) Цитата:
Цитата:
|
Respect
Цитата:
Цитата:
Diamond Цитата:
Цитата:
Цитата:
Код:
@echo off |
Вопрос:
Можно ли как-то заставить GUI, игнорировать (установленый в системе по умолчанию) стиль Windows XP. Т.е чтобы окно отбражалось в классическом виде (как в 98-м) не зависимо от системного стиля? Второй вопрос: Сущесвует ли какой нибудь простой способ претаскивания окна стиля $WS_POPUP или это возможно только за счёт слежения за позицией курсора? Кому нибудь уже удавалось двигать такое окно с помощью мыши? Я написал код, окно двигается без проблем, только вот я не уверен что это правильный способ. Код:
#include <Guiconstants.au3> Цитата:
Цитата:
|
Хочется узнать, как бы сделать так, чтоб скрипт искал файл qip.exe во
всём каталоге Program Files, и если таковой найдется - возвратил бы тот каталог, в котором он лежит и запихнул бы в реестр полный путь к катлогу (не к файлу). Это вообще осуществимо? Заранее спасибо! |
Diamond
Цитата:
Цитата:
Код:
#include <Guiconstants.au3> Цитата:
|
DenchikK
Цитата:
Код:
#include <File.au3> |
DenchikK
Creat0R К сожалению, а может и к радости, мне не удалось найти уже готового решения и я решил написать функцию поиска сам. А сейчас захожу на форум и, вот тебе раз, опоздал... Ну да ладно... как вам такой вариант, вроде бы тоже ничего? :blush2: P.S. Есть ещё перебор через VBScript с помощью ObjCreate(). Если интересно - выложу. :) Код:
$ret = find(@ProgramFilesDir,"qip.exe") |
Такой вопрос:
-Возможно ли получить иконку из файла, в случае если расширение файла не зарегистрированно в системе? Т.е мне нужно сделать GuiCtrlSetImage(), и указать так, чтобы та иконка которая отображается на файле, была считана для контроля ($CtrlID). К примеру, есть файл Program.exe, известно что далеко не все исполняемые файлы (и другие) содержат иконку, и нужно каким то образом определить, содержит ли этот файл иконку, если не содержит, то естественно путь к иконке можно указать к Shell32.dll, 2 (где 2 это ID иконки для екзешников не содержащих иконки), если содержит, то к самому файлу, и как ID ставить 0. А если файл не исполняемы, то можно по расширению читать из реестра путь к иконке. Вобщем-то сам вопрос - Как узнать, содержит ли файл иконку? и по возможности, получить путь к иконке для не зарегистрированных типов файлов. |
Diamond
Цитата:
Правда есть пару минусов - нет возможности заранее получить общее количество найденых папок (для точного подсчёта прогрессбара, или вывода прочей информации), также нельзя искать по маске, или ставить случайно слеш после пути :tongue: . Но в данном случае, если требуется произвести исключительно поиск, то этот (твой) вариант идеальный! :up: P.S. Немного изменил гуи для перетаскивания, и код для поиска (там в самой функции случайно указал \qip.exe :blush2: ). |
Diamond
А функция не работает то :( - нужно Global $GetPath = 0 ставить вне функции, т.к каждый вызов подфункции, вне зависимости от того найден ли файл, задаёт переменной $GetPath значение 0, таким образом цикл не прирывается, и пока не проверяются все файлы функция действует... Вот немного изменил её (сорри если что), а также добавил в неё определение файла в корневом каталоге (в $Path): Код:
Global $GetPath=0 P.S. всё изменённое выделенно. |
Diamond
Немного “гуинизировал” твою функцию для поиска файла :biggrin: - в первом поле задаём путь в котором нужно искать, а в нижнем запрос (имя файла) - неверно набранный путь (если не существует или содержит слеш на конце) определяется, а также определяется если набранное имя файла содержит непозволенные символы (< > | ? : * / \ "): Код:
Opt("GuiOnEventMode", 1) |
Creat0R
Цитата:
Цитата:
Цитата:
Цитата:
А вот ExitLoop что ты добавил, никак не влияет на прерывание! :nono: |
Diamond
Цитата:
|
Creat0R
Цитата:
Когда дочерняя подфункция находит файл, она завершаясь возвращает контроль родительской функции, которая в свою очередь (как я понял) продолжает работу с того места откуда последний раз запускала дочернюю подфукцию, а вот тут-то :moderator её будет поджидать твой ExitLoop. Исходя из всего выше сказаного, я думаю (моё) "условие для прерывания всех циклов" - абсолютно лишнее! Т.е. когда стоит твой ExitLoop, то до моего условия (прерывания), дело вообще не доходит!!! Уф-ф... В общем, я убираю его (условие)... :) |
Нашёл в аутоите баг (или это так задуманно?) - При BlockInput(1), вроде всё кроме Ctrl Alt Del должно быть заблокированно, но срабатывает нажатие и на Sleep и на Power.
Собственно вопрос: Возможно ли перед блокировкой, назначить другое действие для этих клавиш? (т.е чтобы при их нажатии ничего не происходило) - Очень очень нужно :( . P.S Задать клавишу Sleep можно, но она почему то продолжает работать (как Sleep) |
Давно искал способ сделать “плавающее окошко”, чтобы ещё при “плавании” :), перемещалось хаотично по экрану. Когда ещё только начинал разбирать гуи в AutoIt'е, думал это не реально, и забросил эту затею, но вот тут ни с того ни с сего, я вдруг вспомнил об этом, и решил попробовать реализовать (всё же знании уже побольше), и, реализовал! (довольно без проблем, и быстро)...
Вот Пример: Код:
#include <GuiConstants.au3> |
Оказывается, можно вызвать MsgBox не в стильном виде (не испоьзуя стиль WinXP) - т.е сообщение будет выглядеть как системное в Win98...
Нужно просто перед основным флагом, ставить стиль 0x20000: Код:
MsgBox(0x20000+64, "Hello!", "I am styleless MsgBox ;) ") |
Привет всем!!!
Помогите пожалуйста с скриптом для установкой Fraps и Runpad Shell. Для тихой установки уже наверное все ключики перепробЫвал, но не помогает, всеравно вылазиет табличка с уведомлением установить программу. |
borzoy
Цитата:
А вообще, нужно было создавать отдельный топик: Цитата:
|
Creat0R
Цитата:
|
borzoy
Я отправил вам оповещение, что ваша тема [autoit] Fraps и Punpad Shell4, с просьбой помочь создать скрипт, перенесена в созданную вами же тему Помогите с тихой установкой Fraps и Runpad Shell, в которой уже начато обсуждение. Зачем создавать одинаковые темы? ОПК - пункт 2.1 (Тема переименована в [autoit] Fraps и Runpad Shell, ни один пост не удалён) |
В AutoIt'е плохо (а точнее не корректно) работает функция FileDelete - например если написать её так:
Код:
FileDelete(@TempDir & "\") |
Creat0R
Цитата:
Думаю всё же, такой способ надёжней в плане безопасности, чем мучаться и придумывать разные хитрости, пытаясь исправить баг AutoIt'а. :) Код:
Dim $fso |
Diamond
Да, это неплохой способ, спасибо, возьмём его пожалуй в арсенал функции аутоита ;) Я что-то не нашёл функции, которая проверяла бы данное число на чётность/не чётность, и решил её сам сделать (понадобилась сея функция), но не уверен что это правильное решение, может уже есть подобная функция, или у кого то есть более универсальное предложение? :shuffle: Код:
$iNumber = 2075674 И ещё, заметил вроде ещё багу в аутоите, проверить очень просто: Код:
MsgBox(0, "", 0.00001) |
Creat0R
Привет, на самом деле все гораздо проще: Код:
Func _IsEven ($num) Цитата:
Для однозначного представления используй StringFormat: Код:
MsgBox (0,'',StringFormat('%.5f',0.00001)) |
Creat0R
Diamond Красивый способ для FileDelete с форума поддержки: Код:
Func _FileDelete ($file) |
Подскажите, как с помощью WinApi поменять частоту обновления экрана?
В интернете есть множество примеров с использованием библиотеки: user32.dll функция: ChangeDisplaySettingsA, но как реализовать это в AutoIt совершенно не представляю. Очень надо!!! |
amel27
Цитата:
Цитата:
Цитата:
Такой вопрос: Как послать обычное нажатие клавишы Windows (с изображением окон)? нужно отдельно в експлорере вызвать контекстное меню, и единственны способ который мне пришел в голову, так это нажать эту клавишу... Пробую так: Код:
Send("#") Или, как можно обновить окно експлорера, но не посыланием F5, а именно полноценным обновлением (в некоторых случаях F5 не помагает). |
Ещё способ удаления файла:
Код:
Func _FileDelete($Path, $FileName) Код:
$FileName = @ScriptDir & "\test.txt" Если поставить последний параметр как 1 ($Flag=1), то подсчёт не будет учитывать возврат каретки и перевод строки (@CRLF), если поставить параметр на 2, то будут учитываться все символы кроме @CR, ну а если поставит параметр $Flag = 3, то будут учитываться все символы за исключением символа перевода строки (@LF). |
Diamond
Цитата:
Код:
; Пример использования функции |
Creat0R
Цитата:
Код:
Func _FileCharCount ($file, $flag=1) |
amel27
По поводу частоты обновления Отлично! Всё работает! :UP: Если честно, я и не надеялся что вообще кто нибудь ответит, иначе задал бы этот вопрос ещё месяц назад. Большое спасибо! P.S. Была проблема с видеокартой, в некоторых играх частота сбрасывалась с 85 Гц. на 60 Гц. Перепробовал уже (наверное) все известные утилиты и ни одна из них не помогла. Теперь проблема решилась. :victory: Ещё раз спасибо! |
Есть фирменная YAMAHA'овская программа для конвертирования звуковых WAV-файлов
в формат MMF (используется в сотовых телефонах Samsung, LG, Pantech, etc...) Называется WSC-MA2, сайт http://smaf-yamaha.com/ Это, похоже, единственая программа, которая может конвертировать WAV->MMF. Но она не работает из командной строки, у нее нет меню, она не работат в пакетном режиме. Для того чтоб сконвертировать WAV в MMF надо схватить WAV-файл мышкой, перетащить и бросить его на маленькое, красивенькое окошко этой программы. Можно ли с помощью AutoIt проделать такую операцию? То есть "взять некий WAV-файл мышкой" и "кинуть его на окошко этой проги" (в перспективе взять по-очереди в цикле все файлы с расширением WAV и покидать их на окошко программы) Реализуемо ли это в рамках Auto-It? или вообще как-нибудь, кроме как вручную. спасибо. |
i_mihal
обычно перетаскивание можно заменить на копировать/вставить через буфер обмена... |
Чтение параметров локализации средствами API:
Код:
$sys = DllCall ("kernel32.dll", "int", "GetSystemDefaultLCID") |
Написал давно желанную функцию, но она работает как бы наполовину - она должна заменять стандартную функцию FileSelectFolder, но проблема в том, что у меня не получается - А) либо создать все вкладки (в TreeView) для всех существующих папок (это также займёт кучу времени на их генерацию), Б) либо создавать их “находу” (т.е в момент вызова/раскрытия той или иной вкладки) - в принципе, проблема со вторым вариантом такая - нужно узнать как очистить одну выделенную вкладку от её подвкладок (не удаляя её саму).
Для чего нужна такая функция? во-первых для того чтобы можно было прикреплять это окно к другому приложению (или к родительскому гуи) - эта одна из основных причин (даже самая) - далее можно также используя подобную функцию, просто создавать это окно с разными размерами, с разными кнопками и возвращаемой информацией, также будет возможность задать этому окну атрибут “поверх всех окон” и т.д и т.п... Вот в принципе сам скрипт с примером: Код:
#include <GUIConstants.au3> |
Вопрос знатокам.
А можно ли как-нибудь "раскомпилировать" .exe файл обратно в .au3? |
biggreeder
Цитата:
|
Creat0R
Спасибо, дружище. Выручил. Винт накрылся. Думал пропали все мои скрипты (на диск записывал только exe-файлы) |
День добрый,
интересует следующий вопрос: Можно ли запускать IT скрипт с какимилибо параметрами, например мне нужен скрипт который бы выводи мне 2 значения из командной строки т.е. скрипт я запускаю Код:
RUN.exe параметр1 параметр2 заранее спасибо |
Вообщем такой трабл, при установке Agnitum Outpost Firewall выдает 2 окна с ошибками Microsoft Visual C++ Runtime Library. Я написал в скрипте функцию отлова этих окон с ошибками, но когда закрывается первое окно с ошибкой установка стопорится на Мастере Настройки, т.е дальше только вручную нажимать кнопки приходится. Посмотрите скрипт, мож че подскажите, или из-за чего такие ошибки вылетают, вроде библиотеки Си стоят.
СИНИМ выделено то, что добавил я, все остальное исходный скрипт от Sanja Alone Код:
#cs |
Dicken
Цитата:
... а также поищи в справке по ключу $CmdLine. |
В стандартных примерах нашёл скрипт sysinfo. Так вот, можно ли сделать, чтобы этот скрипт вместо временной папки или папки Windows(допустим) выводил пароль и имя для каждого пользователя?
Кстати, у кого-нибудь есль стандартные модули с русскими комментариями? |
Нашёл недостаток в InputBox(), проверка на IsNumber() всегда возвращает строчную переменную, даже если вводимые данные были представлены в цифре.
Предлагаю два варианта решения: Код:
;~ Эта функция работает только с обычными целыми числами |
Diamond
Это не недостаток, а издержки типа данных Variant - кстати, аналогично и в Visual Basic... Преобразование типа происходит непосредственно перед выполнением операций с данными - например, при попытке провести арифметические операции со строковой переменной... поэтому иногда вместо преобразования проще прибавить к переменной "0". То, что InputBox() возвращает текстовую строку вполне логично. ИМХО текстовый ввод проще контролировать регулярными выражениями, тем более что этот способ универсален и подходит для любых входных данных: Код:
Func _IsStringNumber ($sVar) |
amel27
Цитата:
Немного в другую сторону... У меня есть пару вопросов касающихся сети: 1) Функция InetGet при закачке файлов, обходит прокси? или таже UDF-функция для _InetGetSource тоже не работает с прокси? Мне нужно каким то образом, получать данные с сети (будь то закачка файла или получение исходного кода страницы), вне зависимости от того, подключён ли компьютер к сети через прокси или напрямую. Но желательно каким то хитрым образом обходить прокси, не выключая его (т.е не заметно для юзера) - это вообще возможно? 2) В сети у меня лежит файл с расширением *.js (хотя не очень важно расширение), какое самое быстрое средство для получения с него данных (для его чтения)? неужели _InetGetSource() это самое быстрое(?) средство? |
Creat0R
Цитата:
Цитата:
|
amel27
Цитата:
|
Diamond
Обнови версию AutoIT - это новая фича, еще не устаканилась... :) |
amel27
Цитата:
|
Creat0R
Цитата:
Цитата:
|
Creat0R
Уф, добил таки самопальный _FileSelectFolder, только есть два замечания: 1. Внимание! В параметре $root передается код папки (CSIDL), но ни в коем случае не путь к ней! 2. Функция не поддерживает параметр каталога по умолчанию ("initial dir")... хотя теоретически эту фичу можно реализовать через GUICtrlSendMsg (), т.к. окно выбора может принимать сообщения пред-селекта и установки текста статус-бара Код:
Func _FileSelectFolder ($title, $root = 0, $flags = 0, $hwnd = 0) |
amel27
Цитата:
Приношу свои извинения. :) |
Mihal> Можно ли с помощью AutoIt проделать такую операцию?
Mihal> То есть "взять некий WAV-файл мышкой" и "кинуть его на окошко этой проги" amel27> обычно перетаскивание можно заменить на копировать/вставить через буфер обмена... в этой проге (yamaha'вская wscma) нет "вставить" к сожалению. |
amel27
Цитата:
Цитата:
Цитата:
Но всё же ещё раз огромное спасибо за эту долгожданную функцию :) P.S На офф форуме кстати, тоже вроде с нетерпением её ожидают ;) |
Creat0R
Цитата:
FYI: "по горячему" немного оптимизировал код |
amel27
Цитата:
Немного поизвращался в другом направлении, и сделал нужные для себя функции связанные с массивами, но подумал может кому то ещё пригодятся :shuffle: (комментов нет, но думаю запустив примеры всё довольно быстро станет ясно): Код:
#include <Array.au3> |
Ещё функция для работы с массивом - _ArrayReplace() - Кстати, предыдущие и эта функция, работают только с одномерным (с одним элементом) массивом:
Код:
Func _ArrayReplace(ByRef $Array, $ValueToReplace, $NewValue) P.S А как определять является ли массив двухмерным, или нет? |
Всем всем!
Кому интересна фича отката скрытых папок и расширении файлов, посмотрите на эти два скрипта: Для отката расширении файлов: Код:
$RegKey = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" Для отката скрытых папок и файлов: Код:
$RegKey = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" В сети можно найте несколько подобных расширении, но я ещё не видел подобное, чтобы весь процесс проходил незаметно. Вот если бы ещё найти способ как внедрить пункт в контекстное меню папки, по нажатию которого и запускался бы этот скрипт (в закомпилированном виде), то это было бы вообще шикарно! |
Creat0R
Цитата:
- во избежание проблем индексные переменные в функциях нужно объявлять как Local; - пустые массивы (счетчик со значением 0) нужно обрабатывать отдельно перед входом в цикл; - учитывая, что счет индекса идет всегда с единицы, одной проверки IsArray() явно недостаточно. На самом деле все приведенные функции работают с пользовательским типом данных - "массив со счетчиком"… вот на принадлежность этому типу и надо проверять. Более того, при наличии уверенности в корректности массива можно обойтись без лишнего пользования UBound() - достаточно взять значение по индексу 0. - параметр $JoinedArray в функции _ArrayJoin() имхо избыточный, при нужде поменять параметры проблемы не составит: Код:
If $JoinedArray Then - в функции _ArrayReplace две строки перепутаны местами. Код:
#include <Array.au3> Цитата:
|
Creat0R
Цитата:
Цитата:
|
amel27
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
P.S Думаю мне можно простить ошибки которые я допустил в функциях, т.к совсем недавно я вовсе не мог работать с массивами (для меня это было что то страшное и неопознанное), и то что я осмелился написать сам нужные мне функции, это что то - и благодаря таким замечаням как твои, думаю я вскоре освою их основы :UP: . |
Creat0R
Цитата:
Цитата:
Цитата:
Код:
Func _ArrayClear (ByRef $arr) Цитата:
|
amel27
Цитата:
Цитата:
Цитата:
|
amel27
На основе твоего примера для определения цифрового значения, я сделал функцию для обнажения всех НЕ числовых значении, т.е в результате возвращается значение содержащее только цифры: Код:
Func _StringStripNotNumber($String, $RetType=0) Может у кого то есть более оригинальное название для этой функции? :shuffle: мне если честно ничего другого в голову не пришло. А как можно получить весь путь до файла, за исключением самого имени файла? Т.е к примеру, имеем путь C:\test\test.zip - и нужно получить только путь C:\test - хотел бы узнать как это можно осуществить исключительно регулярными вырожениями.... Я до сих пор обходился так: Код:
$Path = "C:\test\test.zip" |
amel27
Извини что достаю тебя уже третьий пост подряд, но я нашел небольшой недочёт в функции _FileSelectFolder() - там заголовок (первый параметр $title) не отображается :shuffle: |
Creat0R
Цитата:
Код:
Func _StringStripNotNumber ($String, $RetType=0) Цитата:
Код:
StringRegExpReplace ($file, '[^\\]*$', '') |
Creat0R
Цитата:
|
amel27
Цитата:
Цитата:
Цитата:
Цитата:
Моя версия на функцию деления пути используя регулярные выражения: Код:
#include <Array.au3> |
Creat0R
Цитата:
- какие еще ты предполагал разделители кроме '\' ?... имхо часто перегружаешь функции избыточностью, да и читаются они так сложней - легко ошибку пропустить... знаком с "бритвой Оккама"? ;) - зачем последний цикл?.. какие случаи имелись ввиду?... или опять на всякий случай? ;) |
amel27
Цитата:
Цитата:
Цитата:
Просто путь может быть и как ссылка, тогда разделитель будет другой. Цитата:
Цитата:
Соответсвенно замечаниям немного переделал функцию :) : Код:
Func _PathSplitByRegExp($sPath, $pDelim="\") |
Вот ссылка на пост в котором я оставил пример использования функции _StringStripNotNumber() - этот пример по сути предназначен для демонстрации чтения данных из консольного окна (при архивировании или расспаковке), вывод этих данных в статус баре, и собственно обнаженные значения до чисел для того чтобы корректно отобразить процесс распаковки/запаковки в прогресс баре.
http://www.autoitscript.com/forum/in...t=0&p=307745&# P.S Функцию может переименовать так: _StringStripWords() ? |
Creat0R
Цитата:
Код:
Func _IsUNCPath ($str) Цитата:
Цитата:
|
amel27
Цитата:
Интересно, ну я кажется понял суть, но если смотреть в сторону программирования таким подходом, то тут нужен исключительно немалы опыт (которым обладаешь ты ;) ), имхо. Цитата:
Цитата:
Можно последний цикл прописать так (чтобы не было хвостов в виде пустых элементов массива): Код:
For $iArr = 7 To 1 Step -1 |
Creat0R
Цитата:
Код:
#include <File.au3> Цитата:
Цитата:
|
amel27
Вот более модифицированный пример архивирования файлов с выводом процесса в гуи (я там использовал новую твою функцию _FileSelectFolder(), а также заметь, я накалякал свою собственную функцию для InputBox() - она позволяет прикреплять InputBox к окну гуи, и также в ней есть всё тоже что и в обычной функции, и даже больше, мне впервые удалось реализовать ограничение на изменение размера гуи :) - т.е установить минимально допустимы размер окна гуи ) : Код:
#include <GuiStatusBar.au3> |
Функция для ограничения размеров гуи при испольовании стиля $WS_SIZEBOX (я кажется как то спрашивал тут про это, но тогда не имел понятия как сделать, а сегодня уже знании побольше :) )...
Код:
#include <GuiConstants.au3> Полагаю и это можно как то решить, но мне и так пока нравится, если у кого то есть желаение, милости просим ;) - буду благодарен. |
Как можно изменить функцию _ChooseColor чтобы в ней был параметр hWnd?
Я пробовал подсталять этот параметр в DllStructCreate и потом задать его при заплонении структуры данных (DllStructSetData) но всё безуспешно :( ... может кто-то знает как это сделать, и возможно ли вообще? P.S В начале самой функции есть упоминание об этом: Цитата:
|
Creat0R
Цитата:
Цитата:
Код:
Func _ChooseColor($i_ReturnType = 0, $i_colorref = 0, $i_refType = 0, $hwnd = 0) |
Здравия желаю!
Простите если повторюсь,просто не нашёл(а может плохо искал). Есть скрипт ,который архивирует,а потом с помощью встроенного в винду ftp клиента отсылает архив восвояси.так вот хотелось бы перехватывать сообщения ftp и писать их в лог ,что бы занать что и когда как это можно сделать? |
amel27
Цитата:
Цитата:
13ghost Цитата:
|
Creat0R
завтра попробую |
amel27
Цитата:
Вот исходник функции: (если не трудно, укажи где именно нужно менять) Код:
Func _INetGetSource($s_URL, $s_Header = '') |
Creat0R
Код:
Local $ai_IO = DllCall($h_DLL, 'int', 'InternetOpen', 'str', "AutoIt v3", 'int', 1, 'int', 0, 'int', 0, 'int', 0) |
amel27
Спасибо! Такой вопрос по регулярным вырожениям - Как возможно получить определённый текст, который находится между двумя заранее известными символами? Т.е к примеру, имеем такой текст: Код:
test1*этот текст нам нужен*test2 |
Creat0R
что-то подобное я делал в скрипте "расцветки": Код:
$str='test1*этот текст нам нужен*test2' |
amel27
Я имел ввиду получить текст между двумя символами, но они могут быть разные, к примеру если этот метод использовать так (как функию): Код:
$String = '1теперь нам нужен этот текст2' Добавлено: Во! сделал, правда я не уверен что учёл все символы... Код:
$String = '_теперь нам нужен этот текст^' Хм, но теперь другая проблема - если более чем два совпадения символов, то возвращается последнее межсимвольное значение, а нужно чтобы в таком случае возвращалось первое совпадение (с левой стороны, т.е сначала). |
Creat0R
ну... вот еще вариант, выбирающий фрагмент от первого вхождения 1-го символа до первого вхождения 2-го: Код:
$String = '_теперь нам нужен этот текст^' |
amel27
Цитата:
Поздравляю со статусом Ветерана! :4u: Код:
$String = 'Это нам не нужно. Нам нужен этот текст, :и этот тоже:, а :этот нам не нужен:' |
Объясните пожалуйста,а то я не догоняю,не могу понять что в справке написано:
что делает ConsoleWrite? и для чего её можно применить? зарание благодарен |
13ghost
Штатное применение - отладка скриптов средствами SciTE, кстати неплохая альтернатива MsgBox() ;). Выводит заданный тект (например, значения переменных) в экран вывода - тот, что включается по F8. Из нештатных - запись данных в STDOUT при запуске скрипта через CMD. Creat0R Цитата:
Цитата:
|
Цитата:
|
amel27
Цитата:
Цитата:
|
Вопрос про чтение stdout'а AutoItом - наблюдаю эффект, что для некоторых программ, stdout то читается, то не читается (в зависимости от опций).
Например, рассмотрим следующий код: Код:
Func ShowStdout($cmd) C уважением, Стас. |
Иногда название окна не меняется. Получается, что посылая следующий {ENTER} нажимаешь на {Cancel}. Команда sleep не очень эффективна, т.к. она нормально отрабатывается на одном компе, на другом с заметной задержкой а на третьем задержки не хватает. Как быть в таком случае?
|
belonesox
Цитата:
Код:
Func ShowStdout($cmd) Evgeniy15 Цитата:
|
belonesox
попробуй следующий вариант (проверил только для java, python под рукой нет): Код:
#include <Constants.au3> просьба не забывать добавлять в скрипты необходимые строчки #include ! |
Как можно получить загрузку ЦП определённого процесса? не важно, по имени образа, пути к файлу процесса, или по Pid. Это возможно узнать? (AutoIt'ом естественно ;) ).
|
Creat0R
что-то типа такого: Код:
MsgBox (0, '', _GetCPUUsageProcess ('winrar')) |
amel27
Цитата:
Вернее доходит (это я с полным именем проверял, включая расширение), но возвращается всегда ноль :( |
Creat0R
попробуй запустить архивацию каталога и проверить процесс "winrar", FYI: эта функция показывает мгновенное значение загрузки CPU |
люди подскажите пожалуйста
недавно аозникла проблема доведения инсталяции софта до уровня автомата... почти сразу столкнулся с проблемой - не могу заставить скрипт определить сидюк. если прописываешь жестко с какого диска стартовать софтину, то все прекрасно, но когда надо чтоб он сам запуске скрипта определял под каким диском идет сидюк, возникают проблемы, команда неверна и тому подобное.... заранее благодарен |
amel27
Цитата:
Код:
#include <GuiConstants.au3> И ещё, а для чего по умолчанию стоит процесс idle, как я понял это типа “Бездействие системы”? но если оставлять по умолчанию, то возвращается тоже ноль, хотя в Диспетчере задач если ничего не грузит процессор то это значение становиться 99. P.S Что такое FYI? Izh Цитата:
Код:
$var = DriveGetDrive( "CDROM" ) |
Как определить период бездействия пользователя (пример):
Код:
#include <Date.au3> |
Creat0R
Ну... значит процесс не может определить загрузку самого себя, т.к. эти операции выполняются синхронно - пока WMI вычисляет загрузку сам процесс (AutoIt3) ожидает ответа, т.е. действительно простаивает... потому я и сказал о мгновенном значении. по поводу Idle - там скорей всего общая загрузка CPU P.S. FYI - For Yur Information :) |
Цитата:
$source = RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup", "SourcePath") runwait($source & 'Software\prog.exe') это хорошо работает на этапе GuiRunOnce, при автоустановке софта. но может и дальше использоваться если конфигурация носителей не меняется |
amel27
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Creat0R
исправил скрипт - добавил усреднение по заданному интервалу (в "тиках"), кроме того процесс может теперь передаваться как по имени, так и по PID. |
amel27
Цитата:
Хотя мне пока не удаётся подобрать оптимальный интервал использования этой функции (между каждым её вызовом и установкой тикания ;) ). Цитата:
Мне вообще то всё это нужно для одного моего небольшого проэктика, я пытаюсь написать утилитку менеджер процессов - Получилось ВСЁ что хотел, кроме (теперь корректного, т.е в реальном времени) слежения за загрузкой ЦП (каждого процесса в отдельности и общего использования), и использования памяти каждым процессом. Мне удалось адаптировать многие функции из офф. форума, естественно кучу твоих функции, и пару собственных. Утилита позволяет просматривать подробную информацию о процессе, имеет почти все те же функции что и у встроенного taskmgr.exe в Windows (включая собственный диалог запуска приложении - FileRun), и даже чуть чуть больше :) . Добавлено: amel27 Цитата:
|
Diamond
Ты как то спрашивал про то, как заставить гуи НЕ отображать системны стиль, так вот я нашел на офф. форуме решение этой задачки... Это простой скачивальщик (не знаю на сколько он полезен), при его запуске задаётся стиль как в старых/без стильных виндоус. Вот ссылка, я немного переделал, так как там не совсем весь гуи был таким стилем, я даже удивился, как окно от FileSelectFolder() приняло старый (не)стиль :) - видимо и всё остальное что будет использованно в гуи будет иметь подобный стиль. Я не разбирался как оно работает, но видимо там упорно используются Dll'овские штучки :) |
amel27
Тоже на офф. форуме нашел функцию для слежения за бездельем юзера :biggrin: (немного переделал для примера) : Код:
Dim $i_LastActive = _LastActive() |
Creat0R
Цитата:
Цитата:
Код:
$a = _ProcessList ('') |
Creat0R
Цитата:
Код:
#include <Date.au3> |
amel27
Цитата:
Цитата:
Цитата:
|
Creat0R
Цитата:
Цитата:
Цитата:
Код:
#include <Date.au3> |
amel27
Цитата:
Цитата:
Цитата:
Цитата:
Я пока остановлюсь на простеньком... я сделал типа юмористичесукую напоминалку для бездельника :) - вот код: Код:
HotKeySet("^e", "Quit") Будет перебираться случайный промежуток времени, и выскакивать треевская подсказака с напоминанием о том сколько времени пользователь ничего не делал. |
Creat0R
Цитата:
Цитата:
Код:
#include <array.au3> Цитата:
|
amel27
Цитата:
Цитата:
Цитата:
Кстати, я вот ещё что придумал... заносим в массив (можно из файла) разные сообщения (с разной характеристикой и контекстом), и тоже случайным перебором выводим в TrayTip'е, а также можно занести в массив все файлы из папки мелодии Windows - C:\windows\media (можно даже свою папку с мелодиями указать), и тоже в момент вывода сообщения случайно (в смысле в случайном порядке :) ) их проигрывать... |
Ура!!! я это сделал, немного помучался, но всё же сделал!
Вместо использования звуков системы, я использовал её персонажа - старый добрый волшебник “Merlin” :)... Если в системе не найден персонаж, то выводится TrayTip. А и ещё, чтобы персонаж ещё и говорил, в системе должен быть установлен голосовой движёк. При простое более 5-ти секунд, иконка трея меняется на неактивного юзера, при активности иконка обратно меняется на что-то вроде юзера в движении (не смог в системе найти более походящей иконки). Также при простое в переменную $TotalTime накапливается общее время простоя (секунды), а при активности эта переменная сбрасывается на ноль (0)... Также удалось заносить в массив отдельные заготовки сообщении, если есть файл сообщении (LazyMessages.dat), то с него считываются строки, если его нет, то в скрипте уже заготовлены 10 сообщении (на английском)... Для выхода из скрипта в любое время, нужно нажать Ctrl E (при английской раскладке). В общем, на мой взгляд получилось довольно неплохо... правда есть пару моментов, например, как можно проверить закончил ли персонаж читать текст, и соответственно убить его? :) ... вот скрипт: Код:
HotKeySet("^e", "Quit") Скрипт чёрно-белый потому как в разукрашенном виде он занимает более 40-ка тысяч строк. |
Я тоже игрался с msagent-ом. Мои наблюдения:
Код:
#include <File.au3> |
Sanja Alone
Цитата:
Код:
With $AgentControl.Characters($fig) -А что, при использовании Switch учитывается регистр букв? (я про StringLower). Цитата:
Цитата:
Кстати, в системе есть более одного персонажа, благодаря этой статье, я значительно улучшил скрипт - Я написал функцию которая собирает в массив пути к этим персонажам (если они найдены) - _FiguresListToArray(), и затем на основе этих путей, методом случайного перебора (Random естественно), вызывается персонаж... А также удалось осуществить “убийство” персонажа при любой активности пользователя (это я реализовал на основе наводок твоего примера - спасибо). У меня такие вопросы: 1. Где можно узнать список действий определённого персонажа? (желательно средствами AutoIt'а выявить список действии для указанного персонажа). 2. Как можно, и можно ли вообще, регулировать скорость произношения речи? (или хотябы скорость печатания букв). Вот новый скрипт - Детектер лени - Я пока не знаю какой из существующих персонажей что умеет делать, поэтому присвоил им всем одинаковые действия (ошибку вроде не выдаёт) - можно было ещё перебирать оффисные персонажи (как и в статье указанно), но я посчитал это лишнее, хватит пока и 4-ёх :). Код:
HotKeySet("^e", "Quit") |
Creat0R
Цитата:
Цитата:
Цитата:
Цитата:
Код:
[HKEY_CURRENT_USER\Software\Microsoft\Speech\Voices] |
привет, в общем такая проблемка, нужно чтобы в этом скрипте перед Send ( 'Иванов' )
раскладка менялась на русскую а перед Send ( 'Ivanov@f57.nalog.ru' ) на англискую заранее спасибо Код:
; Автоматическое заполнение квитанции |
Sancho111
FAQ -> Как с помощью AutoIt сменить раскладку клавиатуры -> WinAPI-метод |
Sanja Alone
Ты не поверишь, но я на офф. сайте нашел библиотеку для управления персонажами MSAgent! Там есть функция которая возвращает массив всех действии для заданного персонажа, и даже больше, там есть функции позволяющие добавлять/удалять действия в контекстное меню персонажа (по правой кнопке мышки на нём). В общем я в эйфории! :yahoo: Цитата:
А функция для получения списка действии персонажа вот (довольно проста оказалась) : Код:
Func _MAListCharAnimations( ByRef $oCharacter ) |
Creat0R
Цитата:
Цитата:
Код:
FFFFFFF6 - минимальное значение |
Код:
; Автоматическое заполнение квитанции $akey=StringSplit($key,',',1) $akey=^ERROR Error: Incorect number of parametrs in function call |
Sancho111
Я же говорил о методе "WinAPI" Код:
Run ( 'fap2006.exe' ) |
Спасибо за код, но возникла следущая ошибочка
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0) Local $ret =^ERROR Error Uknown Function name |
Sancho111
Цитата:
Установи последнюю версию. |
Sanja Alone
Цитата:
Сделал функцию для установки скорости произношения речи, но не уверен что это правильно: Код:
Func _SetSpeachSpeed($Speed) Что то никак не соображу как использовать Regshot. |
Creat0R
Цитата:
Он сравнит состояния реестра до и после и выдаст изменения. |
VelDmi
Цитата:
У меня вроде нечем так особо задать скорость, до, и после, а потом проверить... т.е нету способной на это программы, сами персонажи вроде не задают скорость, да и в функциях которые я нашел (с офф. форума) нету ничего подобного. |
Creat0R
Цитата:
|
Sanja Alone
Цитата:
Цитата:
P.S Кстати на её (функции) основе, можно также в своих скриптах строить подобный ползунок :). |
написал скрипт, который сперва пишет огромный файл, а потом его же считывает, и проверяет, считалось то же, что записалось или нет?
работает, но медленно, видимо, за счет сравнения строк. Как бы ускорить? что писать в файл, значения абсолютно не имеет. Код:
$filename = "now" & @MIN & @SEC & "temp" |
Dirk Diggler
Цитата:
И нет необходимости строить новый гуи и удалять старый, можно использовать и тот же. А для проверки нажатия кнопки, можно использовать метод реагирования на событие (On Event Mode)... И ещё, зачем SetError(1)? это нигде не используется, или я что-то упустил? Просто быстрее делать: If .. Then ... чем: If ... Then ... EndIf Вот немного переделал пример: Код:
$filename = "now" & @MIN & @SEC & "temp" |
ды вот. эти все потери несущественны по сравнению с теми, что происходят на проверке равенства строк. Вот как бы придумать алгоритм
какой-нть хитрый, ну типа сделать AND по каждому отдельному символу считанной строки и сравнить результат с одим символом? Цитата:
|
Dirk Diggler
Цитата:
Я если честно не вникаю в затею, почему бы не записать временный массив при создании файла, и потом перечитать весь файл в другой массив, и заием сравнивать оба массива по одному элементу за раз? но опять же, я не вижу смысл всего этого, поэтому немного трудно помочь найти решение :( . Цитата:
|
справился. чтение большими блоками устранило проблему.
Цитата:
|
Dirk Diggler
Цитата:
Цитата:
ADD: предположение не подтвердилось - бинарные строки сравниваются медленней обычных ~ на 10%, видимо оператор сравнения не оптимизирован для таких строк. |
как добраться до свойств диска?нужно включить квотирование.
|
amel27
Возможно ли как то адаптировать твою API-функцию _FileSelectFolder() чтобы деактивировалась (disabled) кнопка ОК пр выбранных папках которые немогут содержать (для “нормальной” записи) данные (такие как “Мой компьютер”, “Корзина”, “Сетевое окружение”, “Панель управления” и т.п)? это реально? И конечно очень хотелось бы всё таки иметь возможность указываь заранее исходный каталог (Init Dir). Я тут уже почти доделал подобную функцию на обычном ГУИ, но у меня ушло более 5-сот строк кода и кучу времени на то чтобы построить этот недо-механизм... в общем получается но кривовато, и кажется очень не надёжно :( . |
Народ! Киньте ссылку или подскажите
1) Как нажать клавиши стрелочек, клавиши windows shift contol и т.д. 2) Как получить значение текста из поля ввода какой либо програмы 3)Есть ли где русскоязычный сайт посвящённый AutoIt? P.S. Пишу скрипт переключения на другой SQL сервер через DSN |
magnetikus
Цитата:
Код:
Send("{Down}") Цитата:
Цитата:
Входя в мир программирования, английский желательно основной знать, и тогда есть офф. форум ;) - Там целый клад для начинающего программиста на AutoIt'е. |
как правельно скачать и установить файл?
Здравствуйте!
кто может сказать это правельный скрипт? Код:
;качаем файл 1. насколько и как максимально уменьшить размер создоваемого exe файла? 2. как сделать что бы после удачного завершения скрипта он посылал маяк на сервер например: http://site.com/autoit/stats.php?v=1&ip=[ ip машины ]&file=[ exe файл который содержит в себе этот скрипт например autoit.exe файл который установился ] как можно это реализовать? нужно это сделать в скрытом режими через RunDos не получиться ! |
Подскажите есть ли возможность прочитать файл с разделителями при помощи Autoit.
Команда for /F с этим справляется отлично,но хочется через autoit. Подскажите.Спасибо. |
GTeam
Цитата:
Код:
;качаем файл Цитата:
twincode Цитата:
|
Цитата:
|
GTeam
Цитата:
Но в данном случае можно и без этой функции обойтиться: Код:
ShellExecute("http://site.com/autoit/stats.php?v=1&ip=1.0.0.1&file=autoit3.exe") Код:
Run(@ComSpec & " /c start http://site.com/autoit/stats.php?v=1&ip=1.0.0.1&file=autoit3.exe") |
Подскажите пожалуйста, как получить Product version файла. Я нашел только способ получения File version.
|
AxelM
Цитата:
Цитата:
Код:
$ProductVersion = FileGetVersion($FileName, "ProductVersion") |
Creat0R
Цитата:
Написал батник но он на 98 работать не будет из-за расширенных функций [ SetLocal enabledelayedexpansion ].Хотел переделать под au3,только вот как net use парсить не представляю. вот батник Код:
@echo off |
Нету ли скрипта для установки программы Mobil Edit? С ключами тихая устанока не работает.
http://forum.ru-board.com/topic.cgi?...7&start=780#lt |
twincode
Цитата:
Код:
$ABC = "cdefghijklmnopqrstuvwxyz" |
Creat0R
Цитата:
Код:
;... Цитата:
Цитата:
|
amel27
Цитата:
Правда теперь можно использовать только $flags=1, иначе оно не работает :( Цитата:
|
Подскажите как в AutoIT создать ярлык с зарание выбранной иконкой типа как в VB (Shortcut.IconLocation = WshShell.ExpandEnvironmentStrings("%SystemRoot%\system32\SHELL32.dll, 92"))
|
amel27
Цитата:
|
Creat0R
Цитата:
ADD: на форуме сабжа нашел DLL-ку, позволяющую реализовать CallBack-функциив AutoIT... Если устроит такой вариант можно попробовать для случая стартового каталога в самопальном _FileSelectFolder(). sattva Смотри в справке функцию FileCreateShortcut(), 6-й и 8-й параметры задают файл и номер иконки в файле. twincode если имя шары не меняется, то можно и так: Код:
$ABC = "cdefghijklmnopqrstuvwxyz" |
amel27
Цитата:
|
Creat0R
Ну... при использовании штатных библиотек (поставляемых с операционной системой) придется сначала внимательно прочитать MSDN, так как варианты вызова обычно зависят от множества факторов типа версии Windows и пр. Если все требования соблюдены, то теоретически проблем не должно быть. Касаемо самопальных библиотек (типа той с форума) - тут все на совести их разработчика :) . |
я новичек в autoit
пытаюсь написать скрипт установки программы. дошел до окна, где нужно выбрать несколько чекбоксов и нажать "далее". Если все это делать с функциеей Send, и выставить побольше AutoItSetOption("SendKeyDelay", 150), товсе идет, а вот с функциеей ControlClick нет. Флажки не ставятся, а сразу "Далее" (это если Send("!Д")) если Send("{ENTER}") или той же ControlClick просто стоит. До нажатия "далее" все работает. Я думал, что скрип выполняеться построчно ....Помогите разобраться |
Флажки можно поставить пробелом. Перескакивать между элементами - ТАВ
Кстати кто нибудь знает как при компиляции в скрипт загнать свои собственные файлы и папки - пишу собственный инсталлятор |
magnetikus
Цитата:
|
Цитата:
Send("{DOWN}") Send("{DOWN}") Send("{SPACE}") Send("{DOWN}") Send("{DOWN}") Send("{ENTER}") Send("{DOWN}") Send("{DOWN}") Send("{DOWN}") Send("{DOWN}") Send("{SPACE}") Send("{DOWN}") Send("{DOWN}") Send("{ENTER}") Send("{ENTER}") Меня интересуе, почему при использовании ControlClick начинает исполняться Send("{ENTER}"), а предшевствующие ей ControlClick прорускаються?! |
Как с пом. Autoit узнать список установленных обновлений ОС[и их версий] ?
|
Dirk Diggler
например, из реестра... не понял насчет версий, как вариант - найти соотв. CAT-файл и восстановить его дату Код:
#include <Array.au3> |
Сделал недавно скрипт, в котором на одной из стадий заменяются три файла (именно в таком порядке):
c:\windows\system32\dllcache\Notepad.exe c:\windows\system32\Notepad.exe c:\windows\Notepad.exe У меня на компе при этом выскакивает сообщение о том, что системные файлы были изменины. Ну я засунул в конец скрипта следующий код: WinWaitActive ( "Защита файлов Windows", "Файлы, нужные для правильной работы Windows" ) ControlClick ( "Защита файлов Windows", "Файлы, нужные для правильной работы Windows", 2 ) WinWaitActive ( "Защита файлов Windows", "Вы отказались от восстановления исходных версий файлов." ) ControlClick ( "Защита файлов Windows", "Вы отказались от восстановления исходных версий файлов.", 6 ) На моём компе всё ставится отлично. А на компе одного из знакомых сообщение не выскакивает. Только происходит замена моего файла на стандартный. Не знаю, что и делать. Единственное отличие между компами: на моём нет никаких заплаток, тогда как у знакомо есть выделенка и стоит куча обновлений. |
mrak1990
Цитата:
|
Цитата:
|
mrak1990
Цитата:
c:\windows\system32\dllcache\Notepad.exe c:\windows\Notepad.exe c:\windows\system32\Notepad.exe |
Из дистрибутива к Notepad++. Точнее, из аддона к этой проге, который заменяет блокнот на Notepad++.
|
Появился вопрос насчёт работы AutoIt с SysTreeView321. А именно я бы хотел заставить работать с окном: Свойства папки. Но подходящих операторов что-то не нашёл. Только в папке Include есть файл с нужными функциями:
; _GUICtrlTreeViewDeleteItem ; _GUICtrlTreeViewExpand ; _GUICtrlTreeViewGetBkColor ; _GUICtrlTreeViewGetCount ; _GUICtrlTreeViewGetIndent ; _GUICtrlTreeViewGetLineColor ; _GUICtrlTreeViewGetParentHandle ; _GUICtrlTreeViewGetParentID ; _GUICtrlTreeViewGetState ; _GUICtrlTreeViewGetText ; _GUICtrlTreeViewGetTextColor ; _GUICtrlTreeViewGetTree ; _GUICtrlTreeViewInsertItem ; _GUICtrlTreeViewSelectItem ; _GUICtrlTreeViewSetBkColor ; _GUICtrlTreeViewSetIcon ; _GUICtrlTreeViewSetIndent ; _GUICtrlTreeViewSetLineColor ; _GUICtrlTreeViewSetState ; _GUICtrlTreeViewSetText ; _GUICtrlTreeViewSetTextColor ; _GUICtrlTreeViewSort Но у меня такое ощущение, что они работают только с создаными GUI. |
mrak1990
Цитата:
Для управления внешними элементами, нужно пробовать ControlClick(), ControlCommand(), и им подобные. Но именно со случаем Свойства папки будет сложновато, я как то пытался управлять элементами, но там идентификатор управляющих (Control ID) почти не распознаётся (программой Au3Info). |
Цитата:
Сейчас попробовал повозиться с прогой Winspector. В конце концов нашёл команду, которая ставит или убирает галочку: TVM_SETITEMW И плюс к этому прога выдаёт ещё какую-то инфу: Item: 0*00094d88 Mask: TVIF_HANDLE | TVIF_IMAGE | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_TEXT IParam: 0*000ee458 Text: Отображать "Панель управления" в папке "Мой компьютер" Это вообще может как-то пригодиться? |
mrak1990
Цитата:
Код:
Opt("WinTitleMatchMode", 4) Все эти опции можно редактировать из реестра - HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced |
Цитата:
А можно где-нибудь поподробнее узнать о синтаксисе? Цитата:
|
В общем раскопал справочник по WinAPI. Но мне от него толку маловато:
Код:
Функция SendMessage Код:
DllCall ( "dll", "return type", "function" [, "type1", param1 [, "type n", param n]] ) В общем, кто хоть что-то в этом деле смыслит помогите разобраться. |
mrak1990
Цитата:
Код:
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "ShowSuperHidden", "REG_DWORD", 1) ;если 0, тогда файлы будут показываться. Цитата:
|
Задача - запуск и работа 1с с конкретной конфигурацией с флэш-диска на любом компьютере.
Платформа + база находятся на флэш. Т.е подключив флэшку и запустив 1с с нее же, загружалась нужная конфигурация. Чтобы 1с видел базы пути к ним должны быть прописаны пути в реестре. Я могу написать bat, au3 файл который вносил бы соотв. записи в реестр, но в путях к базам нужно указать букву диска. Проблема в том, что компьютеры разные, соответственно флэш-диск будет иметь разные буквы в системе. Как можно поэлегантнее реализовать? |
qeraser
для BAT подстановка %~d0 возвращает букву диска, откуда запущен скрипт для AU3 выражение StringLeft (@ScriptDir, 2) работает аналогично |
amel27
Спасибо, разобрался :) |
Как определить - есть ли на диске свободных 1 гиг, если есть то вывести сообщений №1, если нет-вывести сообщение №2?!
amel27 А возможно чтобы обновления записывальсь в текстовый файл? где изменения сделать? |
Цитата:
http://foxpopuli.narod.ru/books/api_help.zip |
Creat0R
Код:
Func UpdateExplorer() |
TERMINAL
Цитата:
Код:
$CD = "C:\" Цитата:
Цитата:
Первая функция ( UpdateExplorer() ), в начале использует вторую ( _ExplWinGetList() ), чтобы получить список заголовок всех окон которые являются папками (мы же не хотим обновлять к примеру Internet Explorer :) ). Затем для каждого найденого окна (из полученного списка в массиве), происходит обновление (это делает вызов Dll), всё это в принципе для одной цели - обновить программно все открытые эксплореровские окна (в том числе и рабочий стол), не активируя их и не используя никаких посылании клавишь типа F5 :) , а просто прямой вызов функции (для конкретного окна) обновления окна (та же функция которая выполняется Windows после нажатия F5). |
Creat0R
Остался один вопрос. Для чего ты вызываешь два раза функцию DllCall? Один раз для папок, а другой для рабочего стола? |
mrak1990
Цитата:
И ещё, $GetWinState = WinGetState($WinExpListArr[$iWin]) там уже лишнее, это раньше у меня не получалось напрямую обновлять окна, поэтому приходилось активировать их, посылать им обновление, и затем возвращать окно в исходное положение (свёрнутое/развёрнутое, активное/не активное). Вот обновил функции, теперь список всех окон возвращается средствами функции _ExplWinGetList(), а также убрал лишние строчки: Код:
Func UpdateExplorer() |
Creat0R
Разобрался наконец с твоим скриптом. Но остался один маленький вопросик: Код:
Local $WinListArr[$WinList[0][0]+2] |
mrak1990
Цитата:
|
Creat0R
Я всё это понял. Просто для чего два дополнительных элемента? |
mrak1990
Цитата:
Можно конечно и обойтиться +2, вот так: Код:
Func _ExplWinGetList() |
TERMINAL
Цитата:
З.Ы. имхо скрипт не очень практичен, но не если есть интерес принимаются любые предложения по доработке... заодно можно придать более внятный вид - по аналогии с энумераторами RegEnum* с индексом... типа HotFixEnum |
Защита от повторного запуска
P.S. Просьба, не тестировать этот скрипт из редактора. Код:
$objService=ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2") Код:
$strComputer = "." Код:
$strComputer = "." Код:
$process='notepad.exe' Код:
$process='notepad.exe' С его помощью можно определить, какие программы запускали на компьютере в ваше отсутствие, остаётся только перенаправить информацию в текстовой файл... Код:
#Include <date.au3> Не мешало бы скрыть присутствие скрипта в списке процессов. Слышал, что это можно сделать через WinApi, но я не знаю как... |
Diamond
Хорошие функции! Правда с первой что-то не получается :( При первом запуске выдаёт два совпадения и что скрипт уже запущен, хотя это не так. P.S Это только если имя скрипта test.au3, в других случаях вроде всё нормально. Кстати, а можно ли как то получить список скрытых процессов? |
Creat0R
Я тут переписал твой скрипт в таком виде, в каком, как мне кажется проще его понять начинающим. Плюс добавил комментарии. Вот что из этого получилось. Код:
#cs |
mrak1990
Цитата:
Правда комментарии немного не точные, так будет правильнее (также немного изменил функции, раньше если небыло найдено окон, то рабочий стол тоже не обновлялся, а также во второй функции сразу помещаются в массив уникальные идентификаторы (hWnd), чтобы не нужно было их определять в первой функции - они ведь возвращаются от WinList() ): Код:
Func _UpdateExplorer() |
Diamond
Цитата:
с другой стороны, все остальные способы будут оффтопом для этой ветки. ;) Код:
$process = "script.exe" |
Creat0R
Цитата:
Цитата:
amel27 Цитата:
Наверное что-то вроде этого я и искал, но не ожидал что это будет работать именно так... В любом случае, Спасибо! Цитата:
Скажем, я хочу знать какие программы запускали на моём компьютере в моё отсутствие. Проблема в том, что более опытный юзер может легко обнаружить и завершить мой "шпионский" процесс. У меня возникла идея не скрывать, а просто сделать невозможным его завершение, т.е. скомпилировать скрипт и назвать его к примеру lsass.exe. Хотя и примитивно - зато надёжно. ;) |
Creat0R
Я понял почему обнаруживается совпадение. Если открыть скрипт в редакторе (даже незапускать) то командная строка редактора будет содержать путь к скрипту, а это уже одно "совпадение". Попробуй закрыть редактор и запустить скрипт снова. ;) |
Diamond
Цитата:
Есть у меня один вопрос - как можно проверить определённое окно, на наличие ControlID, но способ нужен надёжный, я написиал вот такую функцию (см. далее), но она не везде срабатывает, к примеру в браузере Opera, возвращаются не все ControlID, хотя в Au3Info.exe нужные (мне, для проверки) ControlID видны: Код:
Func _ControlIDIsExists($hWnd, $ControlID) |
Diamond
Цитата:
Creat0R Цитата:
|
amel27
Цитата:
Цитата:
Дело в том, что в разных версиях определённой программы (в этом случае браузер Opera), меняются постоянно(?) ClassNameNN/ControlID, вот мне нужно как то проверить, существует ли в текущей версии определённый Control, если нет, то я буду перебирать их последовательность (обычно меняется только цифра). К примеру вот такой класс - "OperaWindowClass14" - нужно проверить, есть ли он в программе (в окне), не смистился ли. |
Creat0R
Цитата:
Цитата:
Код:
; Поиск Control по его классу (аналогично можно сделать и по заголовку) |
amel27
Цитата:
Цитата:
Цитата:
Спасибо ещё раз большое за пример/инфу, буду пробовать это использовать :) . |
Creat0R
Процесс в котором обнаруживается совпадение, скорее всего виден в Диспетчере задач. Попробуй индифицировать его по параметрам командной строки: Код:
$CommandString='Test.au3' |
Creat0R
Краткий (промежуточный) отчет о самопальных _FileSelectFolder и подобных функций… На время их активности действительно прерывается любая работа AutoIT-скрипта, причем отключаются все механизмы диспетчеризации вызовов, включая AdLib и GUIRegisterMsg. Впрочем, это вполне логично, так как управление полностью передается системной функции. Отсюда становится понятно, почему разработчики не внесли функциональность HWID в свои функции выбора… просто они не стали заморачиваться разработкой своих функций, а взяли те же системные API-функции (aka wrapper). Особенность _FileSelectFolder (и аналогичных) в том, что ее поведение управляется набором специальных сообщений SendMessage, которые: - функция может инициализировать себе сама через вызов специальной (CallBack) функции, - окно выбора может получить извне. Первый случай не реализуем средствами AutoIT по причине отсутствия поддержки указателей на функцию. Это ограничение можно обойти подключением внешних DLL, содержащих требуемые функции и способных возвращать их указатели. Одна из таких реализаций предложена на форуме оффсайта, к сожалению, она не подходит для нашего случая по указанным ранее причинам, так как опирается на механизм GUIRegisterMsg… Поэтому потребуется писать свою специфическую DLL, либо расширить функциональность предложенной – в любом случае это придется делать на чем-то другом, отличном от AutoIT - способном компилировать DLL, дружить с GUI и обязательно фриварном. Второй случай в принципе можно реализовать на AutoIT, но потребуется дополнительный скрипт, управляющий поведением основного на время выполнения системных функций выбора… при этом придется решить ряд вопросов по синхронизации этих процессов. Кроме того, этот вариант очень ограничен по функциональности, так как управляющий скрипт не будет получать информации о состоянии окна главного скрипта (оперативные сообщения). Например, можно попытаться задать начальную папку или текст статусной строки, но управлять кнопкой «Ok» или реагировать на ошибки ввода не получится. |
Creat0R
Взял на себя смелость собрать дистрибутив этой проги (выглядит он точно так же), чтобы ты его у себя на сайте обновил. В коде ничего не мнеял. Только опечатки убрал: Код:
#cs P.S. Единственное, что я не смог изменить, это информацию о файле (вкладка "Версия"). Одна программа при изменении коверкает, другая не хочет сохранять. |
Diamond
Цитата:
Цитата:
Я не уверен что это корректный способ проверять вторичный запуск скрипта, ведь подобных процессов может быть запущено несколько, и тогда проверка провалится (выдаст что уже запущен процесс)... вроде _Singleton() хорошо справляется с этой задачей. amel27 Цитата:
Цитата:
mrak1990 Цитата:
Там установщик для каких целей? помещает ярлыки? хотелось бы реализовать помещение пункта в контекстное меню проводника, тогда это было бы весьма полезно. |
Creat0R
Цитата:
P.S. Так что пока можешь не скачивать выложенный мною архив. |
Creat0R
Цитата:
|
amel27
Цитата:
|
Creat0R
К сожалению, CallBack-функция ничем не сможет помочь, зато в мануале к ней перечислены все сообщения, которые она может отправлять... В первом приближении все достаточно просто - запускаем _FileSelectFolder, открывается окно выбора каталога, уравляющий (фоновый) скрипт распознает это окно и отправляет ему сообщение (SendMessage или PostMessage) о переходе в нужное место дерева каталогов |
У меня такой вопрос. Как можно по средствам AutoIT удалить ветку реестра? Стандартными командами, как я понял нельзя.
Creat0R Кстати помещение пункта в контекстное меню проводника у меня получилось. |
mrak1990
Цитата:
Цитата:
|
Цитата:
Допустим, мне нужно удалить следующий раздел рестра: "HKEY_CLASSES_ROOT\*\shell\Toogle Hidden Files&Folders\command" Как будет выглядеть команда в этом случае? |
Пробовал вводить команду: REG DELETE "HKCR\*\shell\Toogle Hidden Files&Folders" Но что-то не очень помогает.
|
mrak1990
все удаляет - и через AutoIT, и через CMD... какие сообщения? |
Цитата:
amel27 Можешь всё таки написать, как удалить раздел реестра, только через RegDelete? |
amel27
Цитата:
mrak1990 Цитата:
Цитата:
Код:
RegDelete("HKCR\*\shell\Toogle Hidden Files&Folders") |
Цитата:
Creat0R Закончил я с обещанным скриптом. Я думаю ты и сам разберёшься как он работает. Запускай только СКОМПИЛИРОВАННЫЙ скрипт. Вот ссылка на скачку: http://ifolder.ru/1876076 P.S. Описание в самом начале скрипта я немного изменил (авторские права)... :mellow: |
mrak1990
Цитата:
Но пару примечании... Не совсем верно переименовывать файл скриптом из самого себя :) - это иногда может и не сработать. Лучше сначала прописать в реестре данные, а потом перед самым выходом скрипта послать командную строку с ожиданим в одну секунду, и переименовыванием скрипта... примерно так: Код:
Run(@ComSpec & ' /c ping -n 1 localhost > nul & Ren "' & @ScriptFullPath & '" "' & @ScriptDir & '\Выключить Fast Toogle Hidden Files&Folders.exe"', '', @SW_HIDE) |
Цитата:
|
Creat0R
Цитата:
А у меня на рабочем столе в меню есть пункт "Панель управления NVIDIA", которую можно убирать через настройки. Я думаю с этим пунктом таже история, что и с WinRAR - как-то через DLL. Короче на данном этапе врядли что-то получится сделать. |
Creat0R
Цитата:
Код:
$hwnd = WinGetHandle ("Обзор папок") |
amel27
Цитата:
|
Такой вопрос:
Как можно средставми RegExp осуществлять массовую замену в переменной? Т.е к примеру, имеем такое значение - $Var = "Test%20My/Test" - тут нужно одним махом заменить %20 на пробел, а / (перевёрнуты слэш) на \ (прямой слэш).... Пробую так: Код:
$NewVar = StringRegExpReplace($Var, "%20|/", " |\\") Как такую замену можно произвести? или это не предусмотрено? |
Вопрос !
Кто-то может помочь? Например винт разбит на С, D, E, F - CD-ROM, нужно скриптом определить эти диски и отформатить D,E без всяких визуальных эфектов (тихий режим). |
TERMINAL
Цитата:
Чтобы отформатировать диск, можно использовать ком. строку: Код:
$DriveToFormat = 'Z:' Системны диск отформатировать из запущенной Windows не получится :no:. |
Creat0R
Цитата:
Цитата:
http://www.autoitscript.com/forum/in...howtopic=32691 Цитата:
Код:
#include <GUIConstants.au3> Код:
#include <GUIConstants.au3> |
Creat0R
Цитата:
|
amel27
Цитата:
Цитата:
Может можно как то передавать нужные данные через ком. строку? (в этот же скрипт к примеру). Но вообще, оно работает, огромнейшее спасибо за пример - спустя полтора часа колдования над ним, мне наконец удалось поместить всё это в более или менее юзабельные UDF'ы :biggrin: (см. ниже пример). Правда есть один момент - Не получается нормально определить заголовок окна выбора каталога (Обзор папок), хотелось сделать универсально, но даже при попытке использовать класс имени окна ("classname=#32770"), почему то вместо окна обзора папок находит окно диспетчера задач... и кстати, интересно, в английской версии Windows как это окно называется, я предположил что Select folder, но не уверен. Вот собственно адаптированные функции и пример использования: Пример: Код:
#include <GUIConstants.au3> Функции: Код:
Func _FileSelectFolder($title, $root = 0, $flags = 0, $InitDir = '', $hwnd = 0) |
amel27
Цитата:
В общем решил я эту задачку UDF'ным путём ;) ... Код:
$String = 'file://localhost/%22c:/my%20test/test.zip%22' |
Creat0R
Цитата:
- для одного сообщения массив понятно не нужен, это я с запасом на обработку нескольких сообщений зарядил SWITCH, ну и соответственно массив; Цитата:
ADD:помнится, я еще практиковал межскриптовый обмен через ключи рееестра... скажем, один меняет значение извеcтного параметра, а второй в цикле отслеживает эти значения и делает свои выводы (по SWITH)... хотя это было вызвано совсем другими причинами - оба скрипта крутились под разными учетками, один под SYSTEM, а второй под рядовым пользователем. |
Creat0R
Вроде разобрался с DLL-кой, проблема была не в GUIRegisterMsg (она-то как раз работает), а в самой DLL-ке... Нашел где подправить чтобы запустилась, осталось только состыковаться с автором и перекомпилить как надо. :) Все-таки через CallBack все выглядит намного круче - можно по ходу получать инфу о выбранных файлах/каталогах, фильтрах, контролировать правильность ввода в Edit-Boxе и на основании этого менять подстветку, текст кнопок или текст статус-бара. |
Цитата:
Код:
MENUITEM "Мой пункт", 29640 Нашёл ссылку, вроде бы относящуюся к делу: http://msdn2.microsoft.com/en-us/library/aa381023.aspx |
Creat0R
Автор DLL-ки подкинул идею, как можно попробовать реализовать средствами AutoIT... К сожалению, фокус прокатил только с классическим интерфейсом, но это уже большой плюс!.. Для окна в стиле Explorer без сторонних модулей видимо не обойтись. Код:
#include <GUIConstants.au3> |
amel27
Цитата:
Большое спасибо тебе, и автору идеи! |
Завершение процессов и служб
Некоторые процессы невозможно завершить с помощью ProcessClose() т.к. они имеют отношение к службам. А если такой просесс завершить принудительно, (например с помощью консольной команды TASKKILL) то в журнал системных событий записывается сообщение об ошибке, и потом что либо найти в нём с каждым разом становится всё труднее... Всё это навело меня на мысль написать скрипт: Код:
$ProcessName="oodag.exe" ; имя завершаемого процесса |
mrak1990
Цитата:
Я думаю единственным препятствием может быть "блокирующий дескриптор" - а откуда ему там взятся, если только в момент переименования, файл не открыт для записи каким либо другим процессом (естественно, такое "открытие" может произойти только с ведома пользователя). |
Diamond
Цитата:
Единственное, что надо будет дописать, чтобы он обновлял не только открытые окна, рабочий стол, но и диалог выбора\открытия файла. Но в этом нет ничего трудного, к счастью. |
Почему вот такой батник работает:
fsum.exe -c -r -d%inputdir% %mdfile% > fsum.err а автоит нет: RunWait (@ScriptDir& '\fsum.exe -c -r -d' &$inputdir& ' ' &$mdfile& ' > ' &@ScriptDir& '\fsum.err', @ScriptDir) пробовал так-же RunWait (@COMSPEC & ' /c fsum.exe -c -r -d' &$inputdir& ' ' &$mdfile& ' > ' &@ScriptDir& '\fsum.err', @ScriptDir) Как привильно запустить команду? |
VelDmi
Цитата:
Возможно путь к скрипту содержит пробелы, или служебные символы, в таком случае надёжнее заключать пути в кавычки: Код:
RunWait ('"' & @ScriptDir & '\fsum.exe" -c -r -d' & $inputdir & ' ' & $mdfile & ' > "' & @ScriptDir & '\fsum.err"', @ScriptDir) |
не работает > fsum.err, то есть при вызове из автоит не пишет в файл fsum.err
|
VelDmi
проверил - с @COMSPEC все работает, попробуй вместо /c поставить /k и отследить сообщения |
amel27
Посмотри пожалуйста пример вживую. http://rapidshare.com/files/31198773/1.rar.html Батником у меня создается файл, а автоитом нет. |
VelDmi
CMD ругался на кавычки после ">", так с кавычками вроде работает: Код:
$CutDir = '"' &@ScriptDir& '\CutDir' & '"' |
Вышла новая версия - AutoIt v3.2.4.1...
Из глобальных изменении: *AutoIt теперь скомпилирован для Unicode, AutoIt3.exe для Unicode - AutoIt3A.exe для ANSI. Для более подробной информации смотрите эту страницу. *Переписан инструмент для работы с окнами (Au3Info tool). *Функции бинарных данных полностью переписаны - скрипты использующие эти функции будет необходимо изменить. Справка на русском для AutoIt v3.2.4.0. |
Интересует взлом скомпилированного AutoIt .exe. Можно или нет это сделать, если при компиляции был выставлен пароль или убрана галка позволяющая декомпилировать?
|
storm2005
Цитата:
|
Цитата:
интересует этот вопрос т. к. хочу устанавливать некоторый софт через логонный скрипт юзера. но проблема в том, что под юзером большинство софта не ставится т. к. юзер не обладает административными правами. в AutoIt нашел замечательную функцию RunAsSet в которой можно передать пароль в отличие от команды runas. но хотелось быть уверенным, что скомпилировав скрипт под паролем его никто не декомпилирует. |
storm2005
Цитата:
Цитата:
|
storm2005
Цитата:
ALL Последнее время при адаптации скриптов под новые версии программ наталкиваюсь на странное поведение AutoIT. А именно при выполнении команды ControlClick как бы не происходит отработки нажатия кнопки. Например это началось в Wintools Net Pro начиная с версии после 8.1.1 Есть такой же проблемный кусок и в установке OutPost (вернее он всегда там был) Код:
WinWaitActive("Configuration Wizard","") Может кто-то уже решал такую проблему?! Может как-то можно задавать длительность нажатия кнопки?! |
В обсуждаемом продукте вроде есть запись макросов - как это можно осуществить и можно ли?
|
Имеется каталог CutDir. в нем куча файлов. Есть файл (file.txt) содержащий строки вида:
C:\Compare\CutDir\Bin\SD0405.dll C:\Compare\CutDir\Bin\LOA\SD0434.dll C:\Compare\CutDir\WEZ\BIGz\erwg.dll Как правильнее удалить из каталога все файлы, не содержащиеся в списках? Пробовал $line = FileReadLine($file) FileMove ($CutDir & $line2, $DestDir & $line2, 0) Работает, только для файлов в корне каталога CutDir, т.е. он не создает автоматически вложенные каталоги при копировании. А мне нужно оставить только файлы, перечисленные в списке, причем и во всех вложенных каталогах тоже. |
VelDmi
amel27 как то написал функцию возвращающую массив дерева каталогов включая подкаталоги, с её помощью эту задачу реализовать довольно просто: Код:
#include <Array.au3> Я не тестировал скрипт, написал на скорую руку. |
Creat0R
Уфф, мне не дано такое понять... Написал сам через попу, но работает вроде: Код:
RunWait (@COMSPEC & ' /c fsum.exe -r -d".\CutDir" *.* > sums.md5', @ScriptDir, @SW_HIDE) |
VelDmi
Цитата:
Вот превратил всё это дело в функцию, теперь проверил работоспособность, вроде работает :) Переменная $ExcludeList также может иметь сразу список файлов для исключения, вот пример - $ExcludeList = "C:\CutDir\test.txt|C:\CutDir\test2.txt" - файлы C:\CutDir\test.txt и C:\CutDir\test2.txt не будут тронуты функцией. Также можно передать во второй параметр функции _DeleteFilesWithExcludes() массив содержащий список файлов для исключения, ну и как показанно в примере, поддерживается и обычный путь к файлу, с которого будет браться список исключении. При успешной операции, возвращает @extended, макрос будет содержать число файлов которые были удалены (именно удалены, не просто количество файлов в соответствии со списком исключении). Код:
#include <Array.au3> |
Я как то сообщил на офф. форуме о серъёзном баге, наверняка многие из вас его заметили, его трудно не заметить...
Разработчики приписали моему репорту NOBUG (не бага), хотя я не согласен :). Баг заключается в следующем - 1) В момент перетаскивания окна ГУИ скрипта по его заголовку, 2) в момент изменения размера ГУИ окна, 3) при зажатии одной из кнопок закрытия/Сворачивания/Разворачивания окна, 4) а также и при открытии любых меню гуи (как главных так и контекстных), и в добавок, 5) при открытии меню из иконки в левом верхнем углу (значок программы) - Скрпит полностью останавливается на время указанных действии. Мне кажется что это не должно происходить, разработчики свернули вину на Windows, мол это баг самой ОС, хотя не смотря на это, некоторые программы (и кстати, написанные тоже на C++) умудряются "не останавливать" свою работу на момент перетаскивания их окна или любой другой указанной ранее “дейтяльности” со стороны юзера. Вобщем я решил эту задачку (надеюсь временно, желательно увидеть решение этой проблеме со стороны разработчиков) вот таким образом: Код:
#include <GuiDragable.au3> При перетаскивании окна (при зажатии мышки в любом места окна за исключением контролов, ведь мы же хотим иметь возможность нажимать на кнопки и т.п.), бегущая строка по прежнему "продолжает бежать" :) - это свидетильствует о том что скрипт не остановлен. |
Метод позволяющий запускать код VBS не создавая временных файлов: Код:
$ProcessName = "AutoIt3.exe" |
Creat0R
Цитата:
Цитата:
|
Creat0R
Отлично! Очень интересный способ! :UP: Даже не подозревал что существует такой объект... Я выяснил что "MSScriptControl.ScriptControl" предназначен также и для JavaScript'ов. VbScript'ы у меня запускаются а вот с JavaScript'ами почему-то ничего не выходит. Привожу два упрощённых примера для сравнения: vbscript: Код:
;~ Доступ к контекстному меню папок: Код:
;~ Диалог открытия файлов: |
amel27
Цитата:
Код:
Opt("GuiOnEventMode", 1) Цитата:
Цитата:
|
Diamond
Цитата:
|
Creat0R
Цитата:
Цитата:
Цитата:
|
Цитата:
Если во время архивации WINRAR нажать на окно мышкой архивация остановится! Мне кажется тут дело в системе, а не в Autoit. |
amel27
Цитата:
VelDmi Цитата:
Цитата:
Цитата:
Цитата:
Т.е получается, что это ответственность программиста предусматривать подобные вещи, а не системы... |
Хотел написать автоустановку разных антивирусов-написал, но проблема вот такая- каждый антивирус заканчивает свою установку по разному и у меня проблема с теми которые начинают сразу после установки сканить диски. Паузу ставить безсмыслено, а вот с процессами поработать можно было было. Какой скрипт лучше написать, если при сканировании антивир процесс грузит примерно до 40 процентов, а когда закончен равен нулю =0 (я так думаю) !? Или может кто-то с этим сталкивался? Свои мысли может изложить...
|
Creat0R
VelDmi Мне трудно представить что кто-то, с затёкшим от напряжения пальцем, упорно удерживает панель заголовка, во время работы приложения. :laugh: Цитата:
Мы требуем от разработчиков исправления бага, но в тоже время забываем что сами являемся в определённой степени разработчиками приложений на AutoIT. А что нам в свою очередь, мешает исправить этот баг в собственных AutoIT сценариях. Тем более, как уже было сказано amel27 такая возможность есть: Цитата:
Получается разработчики AutoIT, свернули вину на разработчиков Windows, а мы в свою очередь свернули вину на разработчиков AutoIT. Но никто из всех трёх (включая и нас), не хочет изменять что-либо в коде. :no: |
Diamond
Цитата:
Учитывая Цитата:
|
Diamond
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Creat0R
Цитата:
Код:
#include <GUIConstants.au3> Цитата:
|
amel27
А как ты код при вставке цветныс делаешь? |
amel27
Цитата:
Но оно работает, а значит это решаемо проще чем я думал, спасибо большое! NikLok Цитата:
Я как то тоже поинтересовался этим вопросом, ответ от amel27 ;). P.S Кстати, я немного изменил метод (для себя), в принципе нет особой необходимости сохранять в файл результаты, поэтому при первом открытии Гуи галка для ввода исходного кода вручную сразу устанавлвивается, а также есть возможность после вывода результатов одной кнопкой скопировать результат в буфер обмена и закрыть Гуи. Скоро выложу обновлённую версию. |
Creat0R
Цитата:
Цитата:
Цитата:
|
amel27
Цитата:
Цитата:
|
VelDmi
Ну да, скорее всего так. У многих приложений наблюдается подобное поведение. Думаю, если это можно назвать "багом", то условно. Creat0R Цитата:
Цитата:
Цитата:
Ну и конечно всегда остаётся второй вариант: "дождаться пока проблему решат разработчики", что кстати вполне возможно, ведь AutoIT от версии к версии набирает силу, и надеюсь что появится больше нововведений которые если даже и не исправят, то по крайней мере с большей вероятностью позволят обойти тот или иной баг. Цитата:
|
Вложений: 1
Diamond
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
amel27, NikLok и ВСЕ: Прикрепил к посту новую версию ГУИ для обработки скрпитов в “цветной вид” (для вставки на форумах). Теперь в нём все настройки сохраняются, и добавлены многие проверки на ошибочность. amel27 Чуть не забыл, если пропустить на обработку сам скрипт (иронично получается :) ), то находятся неопознаные стили, я что-то так и не понял, как распознавать и соответственно добавлять неопознанные стили? |
Creat0R
Цитата:
|
amel27
Цитата:
|
Creat0R Спасибо!
VadikanМожет этот скрипт прямо к форуму прикурутить. Вставил код и он принулительно разукрасился!? |
Вложений: 1
Creat0R
Цитата:
Код:
#include <GUIConstants.au3> |
amel27
Цитата:
Старая проблема со скачакой атачментов всплыла, файл не скачивается :( - Пробовал DMaster'ом, пробовал через IE качалку, через “Сохранить по ссылке как”, но архив скачивается повреждённый (или вовсе не архив а php файл). |
Creat0R
Цитата:
линк: http://www.sendspace.com/file/iaq1xh |
amel27
Спасибо, работает! Правда при нажатии на кнопку закрытия/сворачивания и её удерживания (на месте, если удерживая и двигать мышку то нормально), то счётчик останавливается :( - но это не критично, а так работает... я так понял это вызваная Dll'ка посылает постоянно зарегистрированное сообщения в окно ГУИ, и этим самым “провоцируя” запуск нужной функции (зарегистрированной), так? Хорошо что сама Dll'ка не большая, обычно они бывают большими :) |
Creat0R
Цитата:
Цитата:
|
Системные цвета
Код:
Const $COLOR_SCROLLBAR = 0 ; - цвет полосы прокрутки |
Diamond
Спасибо, давно искал что-то подобное :) |
Creat0R
Рад, что пригодилось. Собирал информацию как говориться с мира по нитке. :) Вот только мне не нравиться что эти функции цвета переворачивают с RGB на GBR, надо будет потом поправить... |
Creat0R
Поправил. :) Теперь только RGB. |
Я написал AutoIt скрипт который автоматически закрывает рекламное окно в visicom 2003:
;Отслеживает и закрывает рекламное окно ;скрыть в системной панели индикатор AutoIt ;AutoItSetOption("TrayIconHide", 1) ;Отображать текущую строку сценария с помощью индикатора системной панели в режиме отладки. AutoItSetOption("TrayIconDebug", 1) AutoItSetOption("SendKeyDelay", 15) ;Переходим в папку с visicom ;FileChangeDir('%1%') FileChangeDir('c:\temp\Visicom') Run('Vcmurbas.exe') WinWaitActive('','') ControlClick('','Вход','Button1') ;MsgBox(4096, "", ProcessExists("mmc.exe")) ;включить режим поиска в окнах-потомках Opt("WinSearchChildren", 1) While ProcessExists("ntvdm.exe")<>0 ;дожидаемся активности окна с рекламой WinWait('Внимание!','Подробнее...') WinClose('Внимание!','Подробнее...') Sleep(200) WEnd запускаю %path_cmdutils%\Autoit3.exe Visicom.au3 %visicom_path% (переменные объявлены и заданы верно) Работает (рекламные окна закрывает), но не отслеживает закрытия visicom и скрипт продолжает зацикливаться. Прикол в том что vcmurbas.exe запущен через NTVDM и в явном виде его ProcessExists не видет :( система Win2kSP4en, что посоветуете? Как это можно обойти? |
V0van3
Цитата:
Код:
$pid = Run("Vcmurbas.exe") |
Клевая прога для работы с телефонной книгой, картинками, мелодиями и т.п. для целой кучи 357 видов мобил
Скачать http://download.mobiledit.com/mobiledit!/MOBILedit!.exe Русик http://msilab.net/show.php?rus=1033 Наброски AutoIt скрипта http://forum.oszone.net/showthread.p...697#post592697 :moderator Цитата:
|
Вот написал скрипт для установки Adobe Acrobat 7.0.0 Professional но видимо где то проблема с нажатием кнопки, так как вылетает сообщение уверены что хотите отменить установку Adobe Acrobat 7.0.0 Professional, и скрипт авто отвечает нет и установка идет далее. Проверял все кнопки все, вроде указано верно в чем может быть проблема?
HTML код:
#cs |
voler
Цитата:
- "предотвращение возможности множественного запуска скрипта" работать не будет, используйте функцию ProcessList(); - если окно может не появиться используйте WinWait() / WinWaitActive() с таймаутом ожидания. - автоматизацию keygen'а лучше с форума убрать, задавайте вопросы по существу. |
Сейчас объясню. У меня есть программа в папке, где такое дерево каталогов.
\ \Files Мне надо, чтобы открывался txt файл, который лежит в папке \Files Как мне такое сделать.. (Или как вообще txt открыть...) |
Цитата:
WinWaitActive ( 'Adobe Acrobat 7.0 Professional - Setup' ) ControlClick ( 'Adobe Acrobat 7.0 Professional - Setup', 'Вот Сюда?', 'Button1' ) И какой текст вводить? HTML код:
&Next > |
Не могу понять, как осуществить задуманное.
Идея такая: Надо в программе заполнять 3 поля: ссылка, логин, пароль. Список ссылок, логинов и паролей находится в файлах links.txt, logins.txt, pass.txt Для одной ссылки, пароля и логина я знаю как это делается: Код:
#include <GUIConstants.au3> И ещё наверное, либо есть способ чтоб выделялся только один чекбокс, либо надо будет переделать под radiobutton. Заранее благодарен за любую помощь. |
_Flame_
Цитата:
Код:
$FilePath = "Files\textfile.txt" Цитата:
Код:
;---это в начало файла--- |
Creat0R
Спасибо большое! Построение GUI идет как надо, но вот только теперь я не понимаю, как обрабатывать эти чекбоксы... Не понимаю, как это: Код:
If GUICtrlRead($checkCN1) = 1 Then Тупо заделал так, но теряется возможность определять, сколько чекбоксов надо сделать для содержимого файла логов: Код:
#include <GUIConstants.au3> |
DenchikK
Цитата:
Лучше (надёжнее) проверять все чекбоксы, а нужный текст брать из самого названия чекбокса, ведь каждый зажатый чекбокс (который мы и будем проверять), имеет то название, которое и требуется для записи... Я бы если честно предложил использовать события (Events), правда придётся немного переделать структуру всего GUI (не сильно :) ), для этого в начале скрипта нужно установить опции для срабатывания событии - Opt("GuiOnEventMode", 1), и потом всем (нужным для обработки) контролам присваивать функцию которая будет срабатывать на событие, так в дальнейшем легче обрабатывать элементы (имхо): Код:
#include <GUIConstants.au3> Кстати, (кажется в последних версиях AutoIt) не обязательно активировать окно для ControlSetText() ;). |
Creat0R
Ещё раз огромное спасибо! Но я что то пока так и не смог разобраться, как же всё это работает... Эти строки я убрал, так они не нужны и мешают (идея какая - если выбран 3 логин, то выбираются вместе с ним 3 пасс и 3 линк): Код:
;Чекбоксы для паролей Код:
; Основная Работа Скрипта - функция для обработки чекбоксов И скорее всего придётся отказаться от чекбоксов в пользу радиобуттонов, но структура case мне пока не даётся... |
voler
Код:
WinWait ( 'Adobe Acrobat 7.0 Professional - Setup', 'Сюда вставить тект окна, отличающий его от остальных') |
DenchikK
Цитата:
Если можешь, поясни пошагово (не программно, а как бы со стороны юзера) - Что должно произойти, какие чекбоксы будут созданы (их структура и цель назначения), что должно происходить при зажатом чекбоксе (после нажатия кнопки Start) и т.д. А я попробую построить соответственно гуи и описать процесс... должно быть не сложно, но цель немного смутновата - когда есть чётко поставленная цель, остальное это время, и усидчивость! (+ немного знании ;)). |
В одной папке находятся скрипт .au3 и .exe исходного приложения. При запуске скрипта всё устанавливается правильно, до самого конца.
Через контекстное меню компилирую. При этом скомпилированный .exe "съедает" исходный .exe и имеет иконку такую же, как и скрипт. При запуске скомпилированного .exe ничего не происходит. AutoIt версия 3.2.4.9. Что делаю не так? |
ChVL
Цитата:
|
amel27
Цитата:
Странно, что нигде ни в одном мануале о необходимости переименования скрипта нет ни слова. Это же не очевидно. Ну, съедает... А может так и надо? |
уважаемый amel27
к сожалению в данном случае не всё так просто. видимо вы не проверяли. я добавил сразу после запуска Visicom MsgBox(4096, "otladka", $pid) и оказалось что Visicom.exe имеет Pid=0 т.е. не отлавливает т.к. Visicom запускается как дочерний процесс NTVDM.exe, последний продолжает оставаться в памяти при закрытии Visiciom то PID NTVDM'а как условие не годится. В случае например с Notepad.exe или ещё с каким-нибуть другим приложением, которое висит в памяти как самостоятельный процесс проблем нет. Естессно ваш код более правильный т.к. позволяет отловить именно тот процесс который запустил скрипт (если есть другой процесс с таким же именем), но в данном случае не в этом проблема. |
Creat0R
Суть работы скрипта такова: Заливка файлов по списку ссылок в аккаунты, доступ к которым задается логином и паролем. То есть со стороны юзеа это выглядит так: он подготоавливает список ссылок на файлы, которые хочет скачать, и список пустых аккаунтов, в которые эти ссылки будут помещены. 1 линк = 1 аккаунт. При запуске скрипта юзер выбирает, в какой именно аккаунт будет заливаться любой по списку файл по линку (radibutton подходит лучше, но я что то до сих пор с опреатором case из примера не разобрался): http://img154.imageshack.us/img154/3923/1autowa8.jpg И вот когда выбран нужный аккаунт, поле самой программы заполняется: http://img154.imageshack.us/img154/8333/2autoyc1.jpg В поле линк - идет ссылка, тут наверное даже не принципиально её положение в файле, пускай будет самая первая в списке (ещё б сделать в этом случае её удаление из списка, после заполнения поля) В поле Логин - тот Логин, что выбран, в поле Пароль - соответствующий ему пароль . Например 6 логин сверху соответствует 6 сверху паролю (то же былоб интереснее, чтоб после заполнения они бы стирались). Вообщем как то так... Спасибо Вам что Вы со мною возитесь! :-) |
Проблема, при отработке скрипта. Ставлю прогу , кто может объясните почему нажатие кнопок не срабатывает. В предыдущем посте мне объяснили в чем проблема. Но не помогает.
HTML код:
#cs |
Сразу недосмотрел. Скомпилированный exe работает, но только тогда, когда рядом присутствует исходный exe, т.е. ничем не отличается от работы со скриптом au3. Самостоятельно НЕ запускается - сразу же требует исходный exe. Декомпилировал его с помощью Exe2Aut и увидел, что в него один к одному переписан скрипт и больше ничего нет, хотя объём около 200 KB.
Интересный момент: видимое содержимое декомпилированного exe с одинаковыми именами (который вообще не запускается) абсолютно аналогично описанному выше (это просто текст скрипта), и объёмы у них одинаковы. Где ещё копать? |
voler
Цитата:
Я бы заменил WinWaitActive на WinWait(), поскольку ControlClick() умеет работать даже с неактивными окнами, и вполне достаточно просто дождаться появления окна. |
DenchikK
Попробую переформулировать (для проверки, правильно ли я понял): Запускаем скрипт, создаются столько чекбоксов, сколько есть записей в файле линков (и только для этих записей создаём чекбоксы)... а точнее (как я понял), создаём radio button ;) Далее после нажатия на Старт, в каждое поле вписывается соответственно - Ссылка, логин, и пароль. Вот только есть одна проблема - какое должно быть название у чекбоксов? можно совместить что то вроде этого: Login_pass_link (как у тебя на скрине)... и потом разделять это на три значения, для того чтобы выявить нужные данные для записи в прогу. Такой вопрос: А списки обязательно держать в трёх разных файлах? может можно записывать в один ini файл (к примеру AvaRemote.ini), чтобы имя секции ровнялось ссылке, а под секцией записи пароля и логина, что то типа такого: Код:
[http://mail.ru] Работать с Radio button совсем не сложно, почти также как и с обычными чекбоксами, разница только в том что может быть выбран один пункт в определённой группе (при наличии таковой). Вот пример: Код:
GUICreate("test") ChVL Цитата:
|
Creat0R
Цитата:
Цитата:
Цитата:
Цитата:
Добавлено ещё раз :-) C radiobutton кое как разобрался. С ini файлом вроде то же (спасибо огромное за подсказку его использовать! так стало гораздо удобнее ). Вот немного уменьшил скрипт, как смог: Код:
#include <GUIConstants.au3> Для последующей обработки выбора radiobutton Код:
Case GUICtrlRead($Radio1) = 1 Код:
If IsArray($Logins_Array) Then |
Diamond
Цитата:
Почему-то был уверен, что поставил WinWait(), уже исправил... V0van3 Цитата:
конечно не проверял, нынче найти 16-битное приложение не так просто... вот навскидку два варианта: Простой и надежный способ ценой лишнего CMD-процесса: Код:
$exe = 'Vcmurbas.exe' ; Имя 16-битного приложения Код:
$exe = 'Vcmurbas.exe' ; Имя 16-битного приложения |
Creat0R
Цитата:
|
amel27
Цитата:
Это и не ошибка вовсе, а всего лишь другой способ. :sorry: |
Diamond
Цитата:
- WinWait()+ControlClick()/ControlCommand() - WinWait()+WinActivate()+Send(). |
DenchikK
Цитата:
Построение цикла, должно быть так: Код:
For $i = 1 To NN Код:
For $i = 1 To Ubound($Logins_Array) - 1 Код:
For $i = 1 To $Logins_Array[0][0] Logins_Array[N][0] = Ключь в Ini-Файле Logins_Array[N][1] = Значение этого же ключа (ключ это то что идёт перед знаком ровно в Ini-файле). Цитата:
Но в теле условия (If ... Then ... EndIf), массив обрабатывается совсем другой... GUICtrlCreateRadio($Logins_Array[$i][1], 10, $Top)... Вот отсюда и может быть вызвана ошибка. Попытка №2 :) : (Добавил также немного проверок на ошибочность). Код:
#include <GUIConstants.au3> Цитата:
Цитата:
...И с тем что я написал :) |
Creat0R
Ещё конкретнее. Беру autoit-winamp.au3 (7.43 KB) от Sanja Alone и winamp533_pro.exe (6.33 MB). Компилирую. Теперь autoit-winamp.exe имеет объём 205 КВ. Это правильно? Этот autoit-winamp.exe работает только тогда, когда рядом находится winamp533_pro.exe. |
ChVL
Цитата:
Но я всё же не понимаю связи с этим: Цитата:
Цитата:
|
Creat0R
Цитата:
|
amel27
Цитата:
Я вовсе не утверждал что нужно не доверять встроенным функциям, я им очень даже доверяю (но проверяю ;) ), ведь если бы не доверял, то и небыло бы для меня повода использовать ту же встроенную функцию Ubound() ;) |
ChVL
Цитата:
Цитата:
|
Creat0R
Огромное Вам спасибо! Буду разбираться. |
VelDmi
Спасибо! C помощью FileInstall поместил дистрибутив в скомпилированный скрипт (по размеру скрипта всё сходится). Как теперь сделать так, чтобы скрипт при запуске использовал именно этот exe, а не требовал его снаружи? Второй вопрос. Как сделать так, чтобы не мелькали окна приложения в процессе установки? |
ChVL
Цитата:
Код:
$WinampPath = StringTrimRight(@ScriptFullPath, 4) & "_Setup.exe" Цитата:
|
Creat0R
Спасибо! C FileInstall() разобрался, работает. Не сразу, правда, понял, что AutoIt принципиально не переваривает кириллицу в директории (безуспешно пытался использовать Рабочий стол). Со скрытым режимом не получается. Запуск ( Run($WinampPath, "", @SW_HIDE) ) на окна, выскакивающие в процессе установки, не влияет (не скрывает). Функция WinSetState оказалась несовместимой с WinWaitActive. Если WinSetState ставить перед WinWaitActive, то последняя не работает. Если после - нет смысла, т.к. окно уже промелькнуло. Эти варианты пробовал и раньше, а другие не нашёл. |
ChVL
Цитата:
Цитата:
Код:
WinWait("Title", "", 5) |
Функции (и пример использования) для отображения стильного диалога “О Программе” Код:
#include <GUIConstants.au3> |
Пример Gui-оболочки для консольных конверторов У меня накопилось с десяток консольных программ типа: архиваторы, конверторы звуковых и графических файлов и т.п. и я подумал, что неплохо было бы для них написать Gui.Цели, которые я поставил при написании: 1. Список для добавляемых файлов должен быть ListView, при чем с поддержкой перетаскивания файлов (Drag&Drop) 2. Каждый новый Файл должен добавляться в конец списка, а как следствие - сортировка ListView запрещена. 3. В списке не должно быть дубликатов файловых путей. Это только стартовый интерфейс, но надеюсь он кому-то сэкономит время в написании подобных программ. :) Код:
#include <GUIConstants.au3> |
Diamond
Цитата:
У меня почему то при вызове $dict.Exists скрипт выпадает с ошибкой: Цитата:
-Функцию _FileOpenDialog() добавил самдельную (от amel27) - позволяет открыть диалог для выбора файла как дочерний диалог ГУИ. -Добавил функцию для поиска в самом ListView, имхо, так надёжнее, и не так уж намного медленнее ;) -Во всех функциях где добавляются новые айтемы (файлы), вызывается AutoSize на каждый добавляемый файл, хотя логичнее бдет вызвать один раз эту функцию по оканчанию добавления всех файлов. -Теперь при добавлении файлов используя перетаскивание, существующие в списке файлы будут подсвечиваться (выделяться) - так думаю более удобно :). -Функцию GetFileName() немного укоротил ;) -Добавил отображение иконок для добавляемых файлов, иконки определяются используя функцию _FileGetIcon() (тоже где то на оф. форуме нашел, правда немного изменил). -Чтобы можно было присваивать иконки айтемам, пришлось вместо вставки айтемов, создавать их встроенными средствами, т.к требуется ControlID. Вот что получилось: Код:
#include <GUIConstants.au3> |
Есть такой вопрос:
Утилита OpenedFilesView, “умеет просматривать” файлы которые заняты разными приложениями... Среди прочих возможностей программы, она имеет весьма удобную функцию - закрывать файлы (их Handle), чтобы к примеру, можно было удалить/переместить/переименовать файл без проблем, или изменить в нём данные. Также программа отображает полный путь к приложению которое “держит” эти файлы... Вопрос в том, возможно ли и на AutoIt получить доступ к подобной информации, а также иметь возможность закрывать Handles файлов, или временно их неитрализовывать (чего в самой программе нет :) )? Полагаю тут надо копать в сторону DllCall, но я даже и не знаю какой “тип лопаты” выбрать :biggrin: P.S На оф. форуме поднимался подобный вопрос, но до сих пор так ни кто и не нашёл решения, надеюсь среди наших, найдутся знатоки и умеющие хорошо копать люди :) |
Просьба помочь "чайнику" AutoItа
Надоело вариться в собственном соку Как правильно организовать скрипт с использованием GUI ? Хотел обратиться раньше,но решил сначала немного самому пощупать(и не без пользы .оказывается) Просьба показать на примере,содержащем следующее : 1.Создается окно GUI 2.В нем создаются : - пара текстовых строк (наверное Label 1 - Label 2) - пара кнопок ( скажем button 1-Button 2) 3.При нажатии кнопки button 1: - предыдущая инфа стирается - создается : - пара новых текстовых строк - пара элементов Input ( с каким то текстом ) - пара новых кнопок ( скажем Read-Save) - при нажатии новой кнопки Read : - выводится инфа до редактирования текста в окнах Input(Слева в окне GUI) - при нажатии новой кнопки Save : - выводится инфа после редактирования текста в окнах Input (Справа в окне GUI) 4.При нажатии кнопки button 2: - Все окно очищается - Выводится любая обобщающая информация Из примера хотелось бы понять : 1.Как правильно вводить текст и очищать окно 2.Как правильно организовать опрос элементов GUI при наличии вновь появляющихся элементов (кнопок Read-Save,элементов Input и т.п. ) 3.Как правильно осуществлять поиск по данной теме форума Заранее благодарен |
gregaz
Цитата:
Код:
Global $Input1, $Input2, $ReadButton=-1, $SaveButton=-1 Цитата:
Цитата:
Цитата:
|
Creat0R
Рукописная функция _FileOpenDialog у меня возвращает цифры 0x433A5C446F63756D... и т.п. и очень много нулей. :idontnow: Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Creat0R
Цитата:
Скорее всего, программе удаётся это сделать за счёт подмены или переназначения блокирующего дескриптора, для своего собственного процесса. К сожалению, больше ничем помочь не смогу... :dont-know |
Creat0R !
Спасибо за помощь ! Многое стало понятнее . Естественно сразу возникли вопросы : 1. Почему даный пример работает даже без обьявления #include <GUIConstants.au3> ? 2. Правильно ли я понял ,что обявление Global переменных нужно только лишь для Обьявления начальных значений еще не созданных элементов ( можно наверное и так : $Input1 ="" и т.д.) ? 3. Цикл Switch-Case-EndSwitch полностью аналогичен циклу Select-Case-EndSelect или есть отличия ? Можно ли здесь поменять их ? 4. Что означает Case -3 (GUIGetMsg()= -3 ) ? Когда появится это значение ? 5. Правильно ли я понял ,что независимо от появляющихся впоследствии элементов GUI , опрос об их состояниях (значениях) производится ВСЕГДА в одном общем цикле While-Wend ? Я пытался после создания новых элементов создавать еще внутренний цикл While-Wend ,поскольку иначе они почему то получались статическими. 6. Можно ли вместо вывода информации в окне MsgBox осуществлять вывод в том же окне GUI ? 7.Можно ли для очиски окна использовать GUICtrlDelete($ControlID) или GuiCtrlSetData($ControlID, "") - что правильнее ? 8. Как праильно осуществлять поиск ранее обсуждавшихся вопросов на форуме ( не на странице) ? Извините что напрягаю. |
Diamond
Цитата:
Цитата:
gregaz Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Creat0R
Цитата:
Код:
$u = DllStructCreate ('byte[10]') |
Creat0R
Цитата:
http://www.thefreecountry.com/utilit...kedfiles.shtml http://www.microsoft.com/technet/sys...on/Handle.mspx З.Ы. Поясню свою позицию. Дело в том, что в Windows нет документированных API-функций по перечислению открытых хэндлов, все подобные утилиты используют недокументированные вызовы функций ядра что не есть хорошо для обычного приложения, в частности могут возникать утечки памяти... При вызове внешних приложений таких проблем не возникает, так как при закрытии процесса система подчищает за ним все "хвосты". Лопата здесь лежит: http://forum.sysinternals.com/forum_...ID=3577&a%20mp. ;) |
Creat0R
Помнится, мы мучали функцию _PathSplitByRegExp()... Так вот оказалось, что RegExp-аналог оригинальной функции _PathSplit() занимает всего одну строчку... :) Код:
#include <array.au3> |
Creat0R !
Спасибо за пример и разьяснения ! Все встает на свои места. Еще пару вопросов,если можно : 1.На вопрос: Можно ли вместо вывода информации в окне MsgBox осуществлять вывод в том же окне GUI ? был дан ответ : Можно, нужно строить также новый ГУИ . А разве нельзя в этом же GUI вот так(тот же пример) : ? Вроде работает. Код:
Global $Input1, $Input2, $ReadButton=-1, $SaveButton=-1 2. Просьба привести любой простой пример выполнения опросов состояний элементов GUI в разных циклах Может быть даже в том же примере провести опрос состояний кнопок "Read" и "Save"в отдельном цикле ? 3. Что означает Case -3 (GUIGetMsg()= -3 )? Какой-то идентификатор завершения процессов ??? |
Creat0R
Цитата:
Код:
$Dict=ObjCreate("Scripting.Dictionary") Похожая ошибка возникает при попытке добавить в словарь ключ (Кеу) который там уже существует. (Словарь - изначально не поддерживает дубликаты) |
amel27
Цитата:
Утилита из того топика, вызвращает хэндлы TCP/UDP (правда не совсем понимаю что это), для обычных файлов информации нет :(. Взял утилиту из второго линка, она возвращает то что нужно, но 400 с лишним кб, это тяжко, даже очень тяжко :sorry: . |
amel27
Цитата:
Но вообще то, я делал функцию _PathSplitByRegExp() не как аналог функции _PathSplit(), а как что то более юзабельное и функциональнее, можно сказать что это как бы “мод” той функции :). gregaz Цитата:
Код:
#include <GuiConstants.au3> Цитата:
Цитата:
Diamond Цитата:
Цитата:
P.S Но я всё же больше доверяю массивам :tongue: (возможно боязень чего то нового). |
Creat0R
Цитата:
Кстати, насчет твоего старого вопроса о массовой замене и функции _StringRexExpReplaceEx… зачем там RegExp? Имхо вариант с обычным StringReplace справится лучше, плюсы очевидны: - работает быстрее; - нет проблем с форматными символами (речь о "|"); - если элементу из массива $Pattern нет соответствия в $Replace автоматически предполагается пустая строка. Код:
$String = 'file://localhost/%22c:/my%20test/test.zip%22' |
Creat0R
функция _GuiMsgBox достаточно громоздкая видимо из-за своей универсальности(на все случаи жизни) Попробую разобраться в ней. А пока 1 вопрос : При закрытии дочернего окна GUI у меня обычно закрывается и родительсое окно. У тебя же в примере этого не происходит . Чем это достигнуто ? |
amel27
Цитата:
Вобщем спасибо, идея с созданием массива вне функции мне понравилась, это позволяет более удобно задавать Patern и соответственно замену. А также... Цитата:
Вот немного переделал, добавил проверку ошибочности и возврат общего числа сделанных замен (@Extended): Код:
$String = 'file://localhost/%22c:/my%20test/test.zip%22' Цитата:
Цитата:
Соответственно, если имеем 2 ГУИ: $Gui_1 = GuiCreate("Первый ГУИ") $Gui_2 = GuiCreate("Второй ГУИ") То для закрытия второго (предполагается что они оба уже видны), задаём как первый параметр команды GuiDelete() его идентификатор: GuiDelete($Gui_2) Также можно и спрятать окно: GuiSetState(@SW_HIDE, $Gui_2) Для показа обратно: GuiSetState(@SW_SHOW, $Gui_2) |
Цитата:
|
Creat0R
По поводу _FileOpenDialog() - замени по тексту в определении структур "byte" на "char"... Так вроде работает, но логику изменений в работе структурных функций AutoIT-а пока не просек... нелогично это, когда бинарные данные (не текст!) по умолчанию преобразуются в юникод... на выходе получается чёрти-чё... |
gregaz
Цитата:
If GuiGetMsg = -3 Then GuiDelete($Gui_2) EndIf то ничего происходить не будет. Поэтому я и написал, что это зависит от ситуации и метода закрытия. amel27 Цитата:
|
Время: 17:32. |
Время: 17:32.
© OSzone.net 2001-