Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты

Закрытая тема
Настройки темы
[архив - Часть 2] AutoIt скрипты

(*.*)


Сообщения: 36491
Благодарности: 6675


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 27-01-2008
Внимание!
Тема переведена в архивное состояние







(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.


Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).
Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).



Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Diamond
Цитата:
Кто ни будь знает, как использовать команду PluginOpen() и где взять сами плагины?
Как я понял, это может быть использованно вместо DllOpen(), но предназначено для открытия плагинов SDK...

Вот ссылка на топик в оф. форуме - Coming Soon: Plugins
А вот как я понял сами плагины - http://www.autoitscript.com/autoit3/...plugin_sdk.zip

И ссылка на помощь по коммандам (во встроенной справке описании почему то нет ) - http://www.autoitscript.com/autoit3/...PluginOpen.htm

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 21:38, 24-06-2007 | #101



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Такой вопрос касательно RegExp...

К примеру имеем такую переменную:

Код: Выделить весь код
$String = "This   is   the   text"
И нужно используя StringRegExpReplace() заменить все двоичные пробелы на одиночные, т.е чтобы в результате получилось это:

Код: Выделить весь код
$String = "This is the text"
Это можно сделать циклом:

Код: Выделить весь код
While StringInStr($String, '  ')
	$String = StringReplace($String, '  ', ' ')
WEnd
Но полагаю 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
В общем в целом, эта функция предназначена для замены не поддерживаемых символов в имени файла, но чтобы заменяемы символы не повторялись подряд.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 05:03, 25-06-2007 | #102


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить 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
Вот пример для использования с именами файлов (чтобы в имени файла не попались неподдерживаемые символы, и чтобы при их замене не было повторных замененных символов) :

Код: Выделить весь код
$String = 'This//\\is<|"|>my??"??:??\*\"::|/::"File.txt'

$String = ReplaceUnsupported($String, '[*?\\/|:<>"]', '_')

ConsoleWrite($String) ;На выходе имеем это - This_is_my_File.txt

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 05:53, 25-06-2007 | #103


Аватара для schel4ok

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


amel27

Цитата:
попробуй вместо Run() использовать ShellExecute() не для EXE, а для ярлыка (*.LNK), поищи его в папке Рабочего стола....
Попробовал - не выходит. То есть ярлык в принципе запускается и начинается процесс настройки Маткада. Но в самом конце, он пишет что задан неправильный параметр ярлыка.

Отправлено: 18:04, 25-06-2007 | #104


Аватара для schel4ok

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Недавно пробовал запустить msi файл из под АвтоИТ (TweakUI.msi) и вот что вышло:
- если запускать ShellExecute("файл.msi /параметр") то ничего не получается
- если запускать ShellExecute("файл.msi") все нормально запускается,но...

при появлении первого же диалогового окна установщика, я скопировал его титул и текст через Ау3инфо и попытался запустить скрипт.
оказалось что АвтоИТ почему то не понимает этих данных и соответственно скрипт останавливается на WinWaitActive

why?

Отправлено: 14:05, 26-06-2007 | #105


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


schel4ok
Цитата:
оказалось что АвтоИТ почему то не понимает этих данных и соответственно скрипт останавливается на WinWaitActive
Возможно окно не становится активным?
Попробуй вместо WinWaitActive() использовать WinWait().

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 14:15, 26-06-2007 | #106


Аватара для schel4ok

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Creat0R

Цитата:
Возможно окно не становится активным?
Попробуй вместо WinWaitActive() использовать WinWait().
Возможно, попробую на днях.
Но когда я испытывал скрипт - я вручную запускал инсталлер.
Потом запускал строчки скрипта, отвечающие за обработку данного окна WinWaitActive.
И после этого тыкал мышкой по окну - соответственно оно по любому было активным, но скрипт не работал.

Вообще я часто встречал что когда наводишь на один и тот же элемент управления, то в окне Ау3инфо в строке classnameNN мигают разные значения.
Я так один раз, например, устанавливал прогу и не мог понять почему она не ставиться. А дело было в том, что в четвертое по счету окно я вводил в текстовое поле путь к папке ярлыков в меню пуск inet\swissknife, а этот путь вместо этого попадал в текстовое поле во втором окне выбора пути к установочной папке C:\swissknife.

Так что shit happens! И видимо дело в наложении одних и тех же элементов управления и в их видимости и невидимости в определенные моменты.

Отправлено: 10:13, 27-06-2007 | #107


Аватара для schel4ok

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Кстати, а существуют ли подобные АвтоИт программы для КПК?

Отправлено: 13:15, 27-06-2007 | #108


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить 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
Благодарности: 1563

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 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




 
Переход