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

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

Ответить
Настройки темы
[Архив - Часть 1.2] AutoIt скрипты

Ветеран


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

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


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





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


Руководство к действию по работе c AutoIt.
Можно ли с помощью AutoIt выбрать каталог? Хочу нацарапать оболочку, которая мне будет конфиги для nnBackup писать, дык выбрать каталог для бэкапа пока только вручную получается... Нельзя ли как-нть вывалить стандартный диалог по выбору файлов-папок, и получить из него результат действий пользователей?

-------
Tega AutoPatcher. Все обновления для XP в одном пакете. http://tega.ru/dirk/links.html


Отправлено: 10:47, 10-02-2006

 

Googler


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

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


Creat0R
Если речь про функцию MyErrFunc () то она построена некорректно, посуди сам что выходит: если ошибку вызвал модуль "WinHttp.WinHttpRequest" - устанавливаем только код ошибки и ничего не возвращаем, а если любой другой - только возвращаем текст ошибки... Если скрипт не отслеживает другие возможные ошибки кроме HTTP и тебе нужен не только номер, но и текст ошибки лучше сделать иначе
Код: Выделить весь код
;Установка функции перехвата COM-ошибок
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
; ...

;Обработчик COM-ошибок
Func MyErrFunc()
    SetError($oMyError.number)
    Return $oMyError.description
Endfunc
... Хотя учитывая, что с одной стороны эта функция единственная для всех возможных событий, а с другой - коды ошибок для любого модуля вполне известны, ключевой информацией является не текст ошибки, а ее номер и источник. Исходя из этой инфы и строятся обработчики ошибок - внутри самой функции MyErrFunc () или в других местах...

P.S. шалость удалась (c) ... конечно скриптом - больше ради прикола чем по необходимости,
заодно разобрался с тегами форума и погонял функции StringRegExp*, если есть интерес то могу запостить...
на самом деле все гораздо проще чем кажется.
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:21, 14-11-2006 | #471



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

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


Аватара для Creat0R

Must AutoIt


Moderator


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

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


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

Цитата:
если есть интерес то могу запостить
Конечно есть - Я открыл соответствующий раздел в справке, но мне сразу захотелось её (справку) закрыть. Очень там всё страшно для меня (пока?). Буду благодарен если направиш меня на путь верный - У меня получилось корректировать только скобки, точки, запятые, и знаки разделителей и ровно...


Код: Выделить весь код
$File = @ScriptFullPath
$FileContent = FileRead($File, FileGetSize($File))

$Result = StringRegExpReplace($FileContent, "[=]", "[color=red]=[/color]")
$Result = StringRegExpReplace($Result, "[(]", "[color=red]([/color]")
$Result = StringRegExpReplace($Result, "[)]", "[color=red])[/color]")
$Result = StringRegExpReplace($Result, "[.]", "[color=red].[/color]")
$Result = StringRegExpReplace($Result, "[,]", "[color=red],[/color]")
$Result = StringRegExpReplace($Result, "[&]", "[color=red]&[/color]")


MsgBox(0, "", $Result)

FileWrite($File & ".res", $Result)

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

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

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

Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community


Последний раз редактировалось Creat0R, 14-11-2006 в 08:29. Причина: Правка кода


Отправлено: 08:25, 14-11-2006 | #472


Googler


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

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


Вложения
Тип файла: 7z Au3ToOSZonePst.7z
(1.3 Kb, 6 просмотров)

Creat0R
По поводу раскраски кода (поскольку это решение на AutoIT то имхо не оффтоп) ... Замечу, что лобовое решение требует последовательного разбора всего текста кода по словарю, а это слишком большой объем работ... Но зачем изобретать велосипед, если SciTE4 уже делает это и весьма успешно? Одна из его возможностей - экспорт кода в HTML/XML-формат с сохранением всех стилей, осталось только определить соответствия между стилями XML и форума и произвести замену. Поэтому обработка проходит в два шага: экспорт кода в XML-файл и последующая обработка его скриптом - содержимое полученного TXT-файла (уже с тегами кода) можно публиковать в форуме. Поскольку текст скрипта напичкан всевозможными тегами вынужден прикрепить его отдельным файлом...

P.S. Как видно из текста скрипта я определил еще не все стили (например пропущены 2, 10, 12, 13) и наверняка не все спецсимволы... они мне просто еще не попадались, на этот случай я оставил проверку на полноту замены... если кто обнаружит их раньше просьба сообщить в личку.

линк: http://www.sendspace.com/file/wjwk9r
--------
нормальные герои всегда идут в обход (c)

Последний раз редактировалось amel27, 30-09-2007 в 09:20. Причина: обновил скрипт и линк

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

Отправлено: 10:31, 14-11-2006 | #473


Аватара для Creat0R

Must AutoIt


Moderator


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

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


amel27
Файл не скачивается - т.е скачивается, но архиватор ругается на то что архив повреждён... может зальёшь на http://www.sendspace.com/ - и\или мне на мыло?

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

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

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

Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community


Отправлено: 00:25, 15-11-2006 | #474


Аватара для Sanja Alone

Ищу Человека…


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

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


Отвечаю на повторяющийся по мылу вопрос. Итак, "Как же определить букву дисковода по маркерному файлу?"
  1. Способ "В лоб":
    Код: Выделить весь код
    $TagFile="маркерный файл"
    $i = 67
    While FileExists( Chr($i) & ":\" & $TagFile )=0 AND $i<=90
        $i = $i + 1
    WEnd
    ;искомый дисковод (буква с двоеточием)
    $drive=$i & ":"
  2. Способ "В лоб, но с размышлением ":
    Код: Выделить весь код
    $TagFile="маркерный файл"
    ;на какого типа дисководах искать маркерный файл
    ;возможные варианты: "ALL", "CDROM", "REMOVABLE", "FIXED", "NETWORK", "RAMDISK", или "UNKNOWN"
    $type="CDROM"
    $drvlst=DriveGetDrive ( $type )
    If not @error Then
        For $i = 1 to $drvlst[0]
            If FileExists( $drvlst[$i] & "\" & $TagFile ) Then
                ;искомый дисковод (буква с двоеточием)
                $drive=$drvlst[$i]
                ExitLoop
            EndIf
        Next
    EndIf
Ес-но, это далеко не все возможные варианты. В зависимости от исходных данных, для решения подобной задачи, весьма полезными могут оказаться ф-ции DriveGetLabel, DriveGetFileSystem, DriveGetSerial, DriveGetType, DriveStatus.

-------
Sanja Alone's site (ConvRegToAU3, OEsr, RSA, AutoIt скрипты)


Отправлено: 01:48, 15-11-2006 | #475


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


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

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


2amel27
Цитата:
Зато теперь можно смело замахнуться на всю линейку NetApi32
(страница 44)
весь сыр бор был из-за GUI авторизации запуска от имени админа.

повторю задачу:
1.Требуется запустить какой либо setup.exe, если пользователь не админ - нарисовать GUI с полем имени и пароля для авторизации запуска (конечно можно воспользоваться стандартным запуском нажав shift но хочется реализовать задачу при помощи AutoIt)
2.В комбо боксе приводим список учёток обладающими правами для установки т. е. админов
3.При неправильном вводе пароля - выдать сообщение об ошибке НЕ закрыв GUI
повторю код

Код: Выделить весь код
#include <GUIConstants.au3>
Opt("RunErrorsFatal",0)
;что запускать
$what_to_run="setup.exe"
If IsAdmin() Then
	;запуск программы
	Run($what_to_run)
Else
	;если не админ, то "рисуем" GUI
	_GUI()
EndIf
Func _GUI()
GUICreate("Авторизация", 198, 125) 
;фон окна
GUISetBkColor (0x00E0FFFF)
;лейблы
GUICtrlCreateLabel("Имя администратора", 25, 5)
GUICtrlCreateLabel("Пароль администратора", 25, 50)
;запуск и отмена скрипта
$ok = GUICtrlCreateButton("Ok", 25, 98, 70,20)
$cancel = GuiCtrlCreateButton ("Cancel",105,98,70,20)
;ввод имени
$us = @UserName
$in1 =GUICtrlCreateCombo ($us, 25, 25, 150, 20)
GUICtrlSetData($in1, "admin|qwerty|Администратор|Винни-Пух")
GUICtrlSetTip(-1,"введите имя любой учётной записи" & @CRLF & "имеюшей права Администратора")
;ввод пароля
$in2 = GUICtrlCreateInput ("solo11",  25, 70, 150, 20, 0x20)
GUICtrlSetTip(-1,"введите пароль")
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
;считываем введённые данные
$out1 = GUICtrlRead($in1)
$out2 = GUICtrlRead($in2)
Global $user = $out1, $pass = $out2
Select
	Case $msg = $ok
		;инициализация запуска от имени админа
		RunAsSet($user, "", $pass)
		;проверка верны ли введённые записи на право обладания правами админа
		if IsAdmin() Then
			;запуск программы
			Run($what_to_run)
			If @error Then
				MsgBox(16, "Ошибка", "Введен неправильный пароль или отсутствует файл "&$what_to_run&@LF&@LF&"Попробуйте еще раз.",5)
			EndIf
EndIf
		;закрытие окна
	Case $msg = $cancel
		ExitLoop
    Case $msg = $GUI_EVENT_CLOSE
		ExitLoop
EndSelect
WEnd
EndFunc
третий пункт не выполняется
PS с оболочками только только начал разбираться, многое не понимаю. Помогите PLS

Последний раз редактировалось Lodoss, 16-11-2006 в 18:22.


Отправлено: 18:05, 16-11-2006 | #476


Аватара для Creat0R

Must AutoIt


Moderator


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

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


Lodoss
Цитата:
третий пункт не выполняется
Что значит не выполняется? не выводится сообщение?

Вот немного изменил - добавил проверку (отдельную) на проавильность ввода пароля (это при условии что пароль заранее известен):

Код: Выделить весь код
#include <GUIConstants.au3>
Opt("RunErrorsFatal",0)
;что запускать
$what_to_run="setup.exe"

If Not IsAdmin() Then
    ;запуск программы
    Run($what_to_run)
Else
    ;если не админ, то "рисуем" GUI
    _GUI()
EndIf

Func _GUI()
    GUICreate("Авторизация", 198, 125)
     ;фон окна
    GUISetBkColor (0x00E0FFFF)
    ;лейблы
    GUICtrlCreateLabel("Имя администратора", 25, 5)
    GUICtrlCreateLabel("Пароль администратора", 25, 50)
    ;запуск и отмена скрипта
    $ok = GUICtrlCreateButton("Ok", 25, 98, 70,20)
    $cancel = GuiCtrlCreateButton ("Cancel",105,98,70,20)
    ;ввод имени
    $us = @UserName
    $in1 =GUICtrlCreateCombo ($us, 25, 25, 150, 20)
    GUICtrlSetData($in1, "admin|qwerty|Администратор|Винни-Пух")
    GUICtrlSetTip(-1,"введите имя любой учётной записи" & @CRLF & "имеюшей права Администратора")
    ;ввод пароля
    $in2 = GUICtrlCreateInput ("solo11",  25, 70, 150, 20, 0x20)
    GUICtrlSetTip(-1,"введите пароль")
    GUISetState(@SW_SHOW)

    While 1
        $msg = GUIGetMsg()
        ;считываем введённые данные
        $out1 = GUICtrlRead($in1)
        $out2 = GUICtrlRead($in2)
        Global $user = $out1, $pass = $out2

                Select
            Case $msg = $ok
                ;инициализация запуска от имени админа
                RunAsSet($user, "", $pass)
                ;проверка верны ли введённые записи на право обладания правами админа
                If IsAdmin() Then
                    ;проверка правильноти пароля
                    If $pass <> "solo11" Then
                        MsgBox(16, "Ошибка", "Введен неправильный пароль"&@LF&@LF&"Попробуйте еще раз.",5)
                        ContinueLoop
                    EndIf
                    ;запуск программы
                    Run($what_to_run)
                    If @error Then
                        MsgBox(16, "Ошибка", "Отсутствует файл "&$what_to_run&@LF&@LF&"Попробуйте еще раз.",5)
                        ContinueLoop
                    EndIf
                EndIf
            ;закрытие окна
            Case $msg = $cancel or $msg = $GUI_EVENT_CLOSE
            ExitLoop
        EndSelect
    WEnd
EndFunc

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

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

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

Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community


Последний раз редактировалось Creat0R, 16-11-2006 в 21:08. Причина: Косметика кода ;)


Отправлено: 19:57, 16-11-2006 | #477


Аватара для Creat0R

Must AutoIt


Moderator


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

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


amel27
Класный скрипт, как видно в посте чуть выше, я его уже приминил - Я тут немного повазился, и немного автоматизировал этот процесс, так что вот, залил



ПРИМЕЧАНИЕ: После завершения обработки, в первую и вторую строку самого скрипта, прописываются пути к файлу обработки (*.xml) и к выходному файлу (*.txt), и при повторном запуске скрипта, эти значения будут подставляться в соответствующие поля, так что эти строки лучше не трогать (для удобства).

Можно было бы ещё лучше автоматизировать этот процесс, если бы можно было автоматичкский экспортировать указанный скрипт в *.xml формат - может можно как то задать параметры для SciTE, чтобы там в тихом режиме указанный файл экспортировался в нужный формат? Тогда можно было бы сразу указывать скрипт (*.au3), и всё бы происходило автоматом - минимальное вмешательство юзера

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

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

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

Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community


Отправлено: 00:20, 17-11-2006 | #478


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


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

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


Цитата:
Вот немного изменил - добавил проверку (отдельную) на проавильность ввода пароля (это при условии что пароль заранее известен):
Ни учётка администратора ни его пароль НЕ ДОЛЖНЫ быть прописаны в скрипте.
Это я тут в комбо списке написал "Администратор,admin.....так не должно быть. решение КАК выдать список учёток обладающими правами админа есть от amel27 (осталось только разобраться как это привинтить к комбо списку пользователей %) ) а пароль должен ввести только админ.

Цитата:
Что значит не выполняется? не выводится сообщение?
итак снова
1.заходим под обычным пользователем в систему если вводим правильные данные (админа)- запускается сценарий run("setup.exe")....
2.если вводим неправильный пароль то выдаётся сообщение "ошибка" и предлагается ввести пароль заново

в существующем сценарии ошибка выдаётся даже если правильно ввёл пароль и файл setup.exe существует
либо вообще ничего не происходит по нажатии кнопки ОК

Отправлено: 06:17, 17-11-2006 | #479


Аватара для Creat0R

Must AutoIt


Moderator


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

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


Lodoss
Вот рабочий (у меня) вариант (в нём уже включено помещение списка юзеров в combo) :

Код: Выделить весь код
#include <Array.au3>
#include <GUIConstants.au3>
Opt("RunErrorsFatal",0)

;Узнаём список пользователей
$admins = _AdminUsers()

Dim $AdminList
;Подготавливаем список пользователей для использования в combo
If IsArray($admins) Then
   For $i = 1 to $admins[0]
	   Do 
		   $AdminList = $admins[$i] & "|" & $AdminList
	   Until $admins[$i] <> $admins[0]
   Next
EndIf

;что запускать
$what_to_run="setup.exe"

If IsAdmin() Then
    ;запуск программы
    Run($what_to_run)
Else
    ;если не админ, то "рисуем" GUI
    _GUI()
EndIf

Func _GUI()
    GUICreate("Авторизация", 198, 125)
     ;фон окна
    GUISetBkColor (0x00E0FFFF)
    ;лейблы
    GUICtrlCreateLabel("Имя администратора", 25, 5)
    GUICtrlCreateLabel("Пароль администратора", 25, 50)
    ;запуск и отмена скрипта
    $ok = GUICtrlCreateButton("Ok", 25, 98, 70,20)
    $cancel = GuiCtrlCreateButton ("Cancel",105,98,70,20)
    ;ввод имени
    $us = @UserName
    $in1 =GUICtrlCreateCombo ($us, 25, 25, 150, 20)
    GUICtrlSetData($in1, $AdminList)
    GUICtrlSetTip(-1,"введите имя любой учётной записи" & @CRLF & "имеюшей права Администратора")
    ;ввод пароля
    $in2 = GUICtrlCreateInput ("",  25, 70, 150, 20, 0x20)
    GUICtrlSetTip(-1,"введите пароль")
    GUISetState(@SW_SHOW)

    While 1
        $msg = GUIGetMsg()
        ;считываем введённые данные
        $User = GUICtrlRead($in1)
        $Password = GUICtrlRead($in2)

		Select
			Case $msg = $ok
				;Проверка был ли введён пароль вообще
				If $Password = "" Then
					MsgBox(48, "Ошибка", "Не был введён пароль")
					ContinueLoop
				EndIf
				
				;инициализация запуска от имени админа
				RunAsSet($User, "", $Password)
				;проверка верны ли введённые записи на право обладания правами админа
				If IsAdmin() Then
					;запуск программы
					Run($what_to_run)
					
					If @error Then
						MsgBox(16, "Ошибка", "Введен неправильный пароль или отсутствует файл "&$what_to_run&@LF&@LF&"Попробуйте еще раз.",5)
						ContinueLoop
					EndIf
					Exit
				EndIf
            ;закрытие окна
            Case $msg = $cancel or $msg = $GUI_EVENT_CLOSE
				ExitLoop
        EndSelect
    WEnd
EndFunc

; Возвращает массив со счетчиком - состав локальной группы "Администраторы"
Func _AdminUsers()
	Local $i, $res [1] = [0]
	; читаем состав группы
	Local $members = _NetLocalGroupGetMembers (@ComputerName, 'Администраторы')
	; проверка на ошибки
	If @error Then
		MsgBox (16, 'Ошибка выполнения', 'Код ошибки:' & @error)
		Exit
	EndIf
	If $members [0] >0 Then
		; фильтруем только локальные учетные записи
		For $i=1 To $members [0]
			If StringRegExp ($members [$i], '^' & @ComputerName & '\\') Then
				ReDim $res [$res[0]+2]
				$res [0] = $res [0]+1
				$res [$res[0]] = StringRegExpReplace ($members [$i], '^' & @ComputerName & '\\', '')
			EndIf
		Next
	EndIf
	Return $res
EndFunc

; Возвращает массив со счетчиком- состав локальной группы произвольного компьютера
Func _NetLocalGroupGetMembers($server, $group)
	Local $i, $string, $res [1] = [0], $pointer= DllStructCreate ("ptr")
	; Выполняем запрос к базе SAM
 	Local $ret = DllCall ("netapi32.dll", "int", "NetLocalGroupGetMembers", _
		"wstr", "\\" & StringRegExpReplace ($server, '^\\+', ''), _
		"wstr", $group, _
		"int", 3, _
		"ptr", DllStructGetPtr ($pointer), _
		"int", -1, _
		"int_ptr", 0, _
		"int_ptr", 0, _
		"int_ptr", 0 )
	; Если произошла ошибка, то выход с кодом ошибки
	If $ret[0]>0 Then
		SetError ($ret)
		Exit
	EndIf
	; Если есть результат, то обрабатываем каждый отдельно
	If $ret[6]>0 Then
		Local $buffer = DllStructCreate ("ptr[" & $ret[6] & "]", DllStructGetData ($pointer,1) )
		For $i=1 To $ret[6]
			$ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _
				"int", 0, _
				"int", 0, _
				"ptr", DllStructGetData ($buffer, 1, $i), _
				"int", -1, _
				"str", "", _
				"int", 0, _
				"int", 0, _
				"int", 0 )
			$string = DllStructCreate("char[" & $ret[0] & "]")
			$ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _
				"int", 0, _
				"int", 0, _
				"ptr", DllStructGetData ($buffer, 1, $i), _
				"int", -1, _
				"ptr", DllStructGetPtr ($string), _
				"int", $ret[0], _
				"int", 0, _
				"int", 0 )
			ReDim $res [$res[0]+2]
			$res [0] = $res [0]+1
			$res [$res[0]] = DllStructGetData ($string,1)
		Next
	EndIf
	; Чистим временные системные структуры
	DllCall ("netapi32.dll", "int" ,"NetApiBufferFree", _
		"ptr" , DllStructGetData ($pointer,1) )
	Return $res
EndFunc

Отправлено: 09:34, 17-11-2006 | #480



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход