|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты |
|
[архив - Часть 2] AutoIt скрипты
|
(*.*) Сообщения: 36554 |
Профиль | Сайт | Отправить PM | Цитировать
Внимание! Тема переведена в архивное состояние Текущая тема http://forum.oszone.net/thread-98914.html (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. Сайт программы Русская справка Коллекция AutoIt скриптов от Sanja Alone Коллекция AutoIt скриптов от MSFN (могут быть устаревшие). Справочник по командам rundll32 (команды запуска диалоговых окон и не только...) AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо). Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров. Цитата Vadikan:
|
||
------- Отправлено: 00:02, 05-02-2006 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Diamond
Цитата:
Вот ссылка на топик в оф. форуме - Coming Soon: Plugins А вот как я понял сами плагины - http://www.autoitscript.com/autoit3/...plugin_sdk.zip И ссылка на помощь по коммандам (во встроенной справке описании почему то нет ) - http://www.autoitscript.com/autoit3/...PluginOpen.htm |
|
------- Отправлено: 21:38, 24-06-2007 | #101 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Такой вопрос касательно RegExp...
К примеру имеем такую переменную: И нужно используя StringRegExpReplace() заменить все двоичные пробелы на одиночные, т.е чтобы в результате получилось это: Это можно сделать циклом: Но полагаю RegExp быстрее справится с этой задачей.... P.S Желательно организовать для этого функцию, т.к вызывать придётся не раз, и использовать разные удвоенные символы... Вот пример этой же функции используя цикл (до сих пор ею и пользуюсь) : Func ReplaceUnsupported($String, $Patern='[*?\\/|:<>"]', $Replace="_") If StringLen($String) = 0 Then Return $String $String = StringRegExpReplace($String, $Patern, $Replace) While StringInStr($String, $Replace & $Replace) <> 0 $String = StringReplace($String, $Replace & $Replace, $Replace) WEnd Return $String EndFunc |
------- Отправлено: 05:03, 25-06-2007 | #102 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Нашёл!!! Эврика!!!
Вот оно - StringRegExpReplace($String, '( +)', ' ') И вот функция соответственно (для других символов) : Func ReplaceUnsupported($String, $Patern='[*?\\/|:<>"]', $Replace="_") If StringLen($String) = 0 Then Return $String $String = StringRegExpReplace($String, $Patern, $Replace) $String = StringRegExpReplace($String, '(' & $Replace & '+)', $Replace) Return $String EndFunc |
------- Отправлено: 05:53, 25-06-2007 | #103 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать amel27
Цитата:
|
|
Отправлено: 18:04, 25-06-2007 | #104 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Недавно пробовал запустить msi файл из под АвтоИТ (TweakUI.msi) и вот что вышло:
- если запускать ShellExecute("файл.msi /параметр") то ничего не получается - если запускать ShellExecute("файл.msi") все нормально запускается,но... при появлении первого же диалогового окна установщика, я скопировал его титул и текст через Ау3инфо и попытался запустить скрипт. оказалось что АвтоИТ почему то не понимает этих данных и соответственно скрипт останавливается на WinWaitActive why? |
Отправлено: 14:05, 26-06-2007 | #105 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать schel4ok
Цитата:
Попробуй вместо WinWaitActive() использовать WinWait(). |
|
------- Отправлено: 14:15, 26-06-2007 | #106 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Но когда я испытывал скрипт - я вручную запускал инсталлер. Потом запускал строчки скрипта, отвечающие за обработку данного окна WinWaitActive. И после этого тыкал мышкой по окну - соответственно оно по любому было активным, но скрипт не работал. Вообще я часто встречал что когда наводишь на один и тот же элемент управления, то в окне Ау3инфо в строке classnameNN мигают разные значения. Я так один раз, например, устанавливал прогу и не мог понять почему она не ставиться. А дело было в том, что в четвертое по счету окно я вводил в текстовое поле путь к папке ярлыков в меню пуск inet\swissknife, а этот путь вместо этого попадал в текстовое поле во втором окне выбора пути к установочной папке C:\swissknife. Так что shit happens! И видимо дело в наложении одних и тех же элементов управления и в их видимости и невидимости в определенные моменты. |
|
Отправлено: 10:13, 27-06-2007 | #107 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Кстати, а существуют ли подобные АвтоИт программы для КПК?
|
Отправлено: 13:15, 27-06-2007 | #108 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать тоже интересует версия для КПК.
ну и вопрос естественно! на сервере лежит файл txt формата который каждый день обновляется, меняются url к exe файлу который нужно скачать и запустить нашим скриптом, можно ли создать скрипт который будет выполнять работу парсера, а точней выдерать с файла http://www.site.com/update.txt строку(http://url_to_file_from_txt_file.com/filename.exe) одна единственая строка в файле! затем качать этот самый exe и запустить его в тихом режиме.. Global $file = 'file.exe' $Ret = InetGet("http://url_to_file_from_txt_file.com/filename.exe", $file, 1, 0) If $Ret = 1 Then RunWait ( $file & ' /S' ) |
Отправлено: 05:33, 28-06-2007 | #109 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата:
#include <ListViewConstants.au3> $a = _GetDesktopItemList('Мой компьютер') ;~ свернуть все окна Send("#d") ;~ запустить ярлык MouseClick ("left", $a[0], $a[1], 2, 1) ;~ По имени элемента рабочего стола (ярлыка) возвращает его местоположение: ;~ x-координата, y-координата. ;~ Если не задан конкретный элемент, то возвращает двумерный массив всех элементов рабочего стола: ;~ имя элемента, x-координата, y-координата; ;~ первый элемент массива содержит количество записей. Func _GetDesktopItemList($sItemName='') Local $i, $ret, $hWnd, $hProc, $pMem, $IconList, $IconInfo[2], $IconList[1][3] = [[0]] Local Const $iMaxSize = 254 ;~ Создаем структуры данных API Local $uPID = DllStructCreate("long") Local $uBuffer = DllStructCreate("long;long;int;int;int;int;int;ptr;int;int;int;int;int;int;int;int;int;char["& $iMaxSize &"]") Local $uPOINTAPI = DllStructCreate("long;long", DllStructGetPtr($uBuffer,1)) Local $uLVITEM = DllStructCreate("int;int;int;int;int;ptr;int;int;int;int;int;int;int;int;int", DllStructGetPtr($uBuffer,3)) Local $uTEXT = DllStructCreate("char["& $iMaxSize &"]",DllStructGetPtr($uBuffer,18)) ;~ Ищем GUI - список элементов рабочего стола $hWnd = DLLCall ("user32.dll", "hwnd", "FindWindow", "str", "Progman", "str", "Program Manager" ) $hWnd = DLLCall ("user32.dll", "hwnd", "FindWindowEx", "hwnd", $hWnd[0], "int", 0 , "str", "SHELLDLL_DefView", "int", 0 ) $hWnd = DLLCall ("user32.dll", "hwnd", "FindWindowEx", "hwnd", $hWnd[0], "int", 0 , "str", "SysListView32", "int", 0 ) ;~ Находим количество элементов списка и готовим массив $ret = DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd[0], "int", $LVM_GETITEMCOUNT, "int", 0, "ptr", 0 ) If $ret[0]=0 Then Return SetError(1, 0, -1) ReDim $IconList[$ret[0]+1][3] $IconList[0][0]=$ret[0] ;~ Находим процесс, которому принадлежит список $ret = DllCall("user32.dll", "int", "GetWindowThreadProcessId", "hwnd", $hWnd[0], "ptr", DllStructGetPtr($uPID)) $hProc = DllCall('kernel32.dll', 'int', 'OpenProcess', "int", 0x38, "int", 0, "int", DllStructGetData($uPID,1)) ;~ Резервируем и заполняем память в чужом процессе $pMem = DllCall('kernel32.dll', 'int', 'VirtualAllocEx', _ "int", $hProc[0], "ptr", 0, "int", DllStructGetSize($uBuffer), "int", 0x3000, "int", 0x4) DllStructSetData($uLVITEM, 1, $LVIF_TEXT) DllStructSetData($uLVITEM, 6, $pMem[0]+DllStructGetSize($uPOINTAPI)+DllStructGetSize($uLVITEM)) DllStructSetData($uLVITEM, 7, $iMaxSize) $ret = DllCall("kernel32", "int", "WriteProcessMemory", _ "int", $hProc[0], "ptr", $pMem[0], "ptr", DllStructGetPtr($uBuffer), "int", DllStructGetSize($uBuffer), "ptr", 0) ;~ Считываем параметры каждого элемента списка For $i=0 To $IconList[0][0]-1 $ret = DllCall("user32.dll", "int", "SendMessage", _ "hwnd", $hWnd[0], "int", $LVM_FIRST+16, "int", $i, "ptr", $pMem[0]) $ret = DllCall("user32.dll", "int", "SendMessage", _ "hwnd", $hWnd[0], "int", $LVM_GETITEMTEXTA, "int", $i, "ptr", $pMem[0]+DllStructGetSize($uPOINTAPI)) $ret = DllCall("kernel32", "int", "ReadProcessMemory", _ "int", $hProc[0], "ptr", $pMem[0], "ptr", DllStructGetPtr($uBuffer), "int", DllStructGetSize($uBuffer), "ptr", 0) $IconList[$i+1][0]=DllStructGetData($uTEXT,1) $IconList[$i+1][1]=DllStructGetData($uPOINTAPI,1) $IconList[$i+1][2]=DllStructGetData($uPOINTAPI,2) Next ;~ Освобождаем память $ret = DllCall('kernel32.dll', 'int', 'VirtualFreeEx', "int", $hProc[0], "ptr", $pMem[0], "int", 0, "int", 0x8000) $ret = DllCall("kernel32.dll", "int", "CloseHandle", "int", $hProc[0]) ;~ Возвращаем данные If $sItemName = '' Then Return $IconList For $i=1 To $IconList[0][0] If $IconList[$i][0]=$sItemName Then ExitLoop Next If $i=$IconList[0][0]+1 Then Return SetError(2, 0, -1) $IconInfo[0]=$IconList[$i][1] $IconInfo[1]=$IconList[$i][2] Return $IconInfo EndFunc |
|
Отправлено: 06:15, 28-06-2007 | #110 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? | DreDo | Хочу все знать | 4 | 01-12-2009 18:54 | |
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. | Vadikan | AutoIt | 1543 | 18-01-2009 10:46 | |
[Архив - Часть 1.3] AutoIt скрипты | biork | AutoIt | 503 | 09-06-2007 11:27 | |
[Архив - Часть 1.2] AutoIt скрипты | Dirk Diggler | AutoIt | 505 | 02-12-2006 11:00 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|