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

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

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

(*.*)


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


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

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


GTeam
Цитата:
можно ли создать скрипт который будет выполнять работу парсера
Примерно так:

Код: Выделить весь код
#include <Inet.au3>

$ExeFileToDownload = _INetGetSource("http://www.site.com/update.txt")
$ExeFileToDownload = StringStripWS($ExeFileToDownload, 3)
$ExeFileName = StringRegExpReplace($ExeFileToDownload, "^.*\\", "")

$Ret = InetGet($ExeFileToDownload, @TempDir & "\" & $ExeFileName, 1, 0)

If $Ret = 1 Then RunWait(@TempDir & "\" & $ExeFileName & ' /S')
Можно конечно ещё сделать так в конце:

Код: Выделить весь код
RunWait(@TempDir & "\" & $ExeFileName & ' /S', @TempDir, @SW_HIDE)
Но если поддерживается ключ /S, то нет особой необходимости.

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

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

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


Отправлено: 06:22, 28-06-2007 | #111



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

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


Аватара для gregaz

Пользователь


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

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


Просьба помочь разобраться с IE... функциями
Задача :
1. Открыть ВЕБ страницу в нужном месте и в нужном формате
2.Ввести в нее данные

Этим скриптом страница открывается и данные вводятся (но в полном размере окна браузера):

Код: Выделить весь код
#include <IE.au3>
$oIE = _IECreate ("http://www.google.com")
$oForm = _IEFormGetCollection ($oIE, 0) 
$oQuery1 = _IEFormElementGetCollection ($oForm, 1)
_IEFormElementSetValue ($oQuery1, "oszone")
_IEFormSubmit ($oForm)
Открываю страницу в нужном месте (в окне GUI ) с помошью скрипта :
Код: Выделить весь код
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
$oIE = ObjCreate("Shell.Explorer.2")
GUICreate( "Внедренная HTML-страница",640,480)
$GUIActiveX=GUICtrlCreateObj( $oIE,0,0,640,480 )
GUISetOnEvent($GUI_EVENT_CLOSE,"closed")
GUISetState ()
$oIE.navigate("www.google.com ")
While 1
  Sleep(1000)
Wend
Func closed()
  Exit
EndFunc
И не могу ввести в нее данные.

Видимо это связано с использованием обьектной переменной,в которых я не очень разбираюсь

И еще один похожий вопрос :

Можно ли управлять (размер,позизионирование ) системного окна типа окна вызываемого функцией FileOpenDialog
или это возможно только для окон GUI ?
Если можно просьба показать (у меня не получается)


Отправлено: 09:14, 28-06-2007 | #112


Googler


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

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


gregaz
Цитата:
И еще один похожий вопрос
и чем же он похожий?

Задачка не так проста как кажется... Для чужих окон юзаем WinMove(), но если речь о системных окнах самого AutoIT, то ИМХО штатными средствами никак, так как на время активности системного окна выполнение скрипта прерывается и изменить параметры окна не представляется возможным... Тем не менее для некоторых системных окон можно написать API-аналог, частично решающий данную проблему... Например, удалось взять контроль над FileSelectFolder(), правда только в классическом исполнении - при запуске вызывается специальная функция, которая может изменить настройки этого окна. В примере меняется стартовый каталог, но аналогично на этапе инициализации можно управлять и другими параметрами.

Думаю не составит труда по тому же принципу написать аналоги FileOpenDialog() и FileSaveDialog().... конечно, если в этом есть необходимость.

Отправлено: 13:03, 28-06-2007 | #113


Аватара для Creat0R

Must AutoIt


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

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


Переделанная функция (взята у Smoke_N на офф. форуме ) _MsgBox() - Если текста для показа слишком много, то текст можно прокрутить и просмотреть (используется Edit-элемент, а для прокрутки есть две самопальные стрелочки ), окно MsgBox меняет размеры в соответствии с текстом и с разрешением экрана.

Код: Выделить весь код
$Text = ""
For $i = 1 To 50
	$Text &= "Line " & $i & " Line " & $i & " Line " & $i & @CRLF
Next

_MsgBox(104, "Test", $Text)

Func _MsgBox($mb_Icon, $mb_Title, $mb_Text, $mb_Time = '')
	Local $StrnLenText = MsgLongestString($mb_Text)
	Local $NumberOfLines = (UBound(StringSplit($mb_Text, @CRLF)) - 1) * 6.5
	If (160 + $NumberOfLines) >= @DesktopHeight Then $NumberOfLines = @DesktopHeight - 200
	Local $Button1Txt = "OK"
	Local $Button2Txt = "Cancel"
	Local $MsgValue = 0
	Local $Timer = ''
	Local $ScrollLabel1 = -1, $ScrollLabel2 = -1
	Local $iMsgBox = GUICreate($mb_Title, $StrnLenText + 190, 100 + $NumberOfLines, -1, -1, 0x00400000, 0x00000008)
	Local $Edit = GUICtrlCreateEdit($mb_Text, 60, 10, $StrnLenText + 105, 30 + $NumberOfLines, 64+128+2048+4, 0x990)
	GUICtrlCreateIcon(@SystemDir & "\User32.dll", $mb_Icon, 10, 10, 35, 35)
	$Button1 = GUICtrlCreateButton($Button1Txt, 30 + ($StrnLenText / 2), 45 + $NumberOfLines, 60 + StringLen($Button1Txt), 25)
	$Button2 = GUICtrlCreateButton($Button2Txt, 100 + ($StrnLenText / 2), 45 + $NumberOfLines, 60 + StringLen($Button2Txt), 25)
	
	If $NumberOfLines = (@DesktopHeight - 200) Then
		$ScrollLabel1 = GUICtrlCreateLabel("т", 40, ((100 + $NumberOfLines)/2)+20, 20)
		GUICtrlSetTip(-1, "Click here to scroll Down")
		GUICtrlSetFont(-1, 18, 600, 0, "Wingdings")
		$ScrollLabel2 = GUICtrlCreateLabel("с", 40, ((100 + $NumberOfLines)/2)-20, 20)
		GUICtrlSetTip(-1, "Click here to scroll UP")
		GUICtrlSetFont(-1, 18, 600, 0, "Wingdings")
	EndIf
	
	GUISetState()
	If $mb_Time <> 0 Then $Timer = TimerInit()
	While 1
		$imsg = GUIGetMsg()
		Select
			Case $imsg = $Button1
				$MsgValue = 6
				ExitLoop
			Case $imsg = $Button2
				$MsgValue = 7
				ExitLoop
			Case $imsg = $ScrollLabel1
				ControlSend($iMsgBox, "", $Edit, "{PgDn}")
			Case $imsg = $ScrollLabel2
				ControlSend($iMsgBox, "", $Edit, "{PgUp}")
			Case $mb_Time <> 0
				If TimerDiff($Timer) / 1000 >= $mb_Time Then ExitLoop
		EndSelect
	WEnd
	GUIDelete($iMsgBox)
	Return $MsgValue
EndFunc

Func MsgLongestString($sText)
	Local $Times = ''
	Local $sSplit = StringSplit($sText, @CRLF)
    If Not @error Then
        ArraySortByLen($sSplit)
        If StringLen($sSplit[1]) <= 100 Then $Times = 2.25
        If StringLen($sSplit[1]) >= 101 And StringLen($sSplit[1]) <= 150 Then $Times = 2.5
        If StringLen($sSplit[1]) >= 151 And StringLen($sSplit[1]) <= 201 Then $Times = 3
        If StringLen($sSplit[1]) >= 202 Then $Times = 3.25
        Return Round(StringLen($sSplit[1])*$Times)
    Else
        If StringLen($sText) <= 100 Then $Times = 2.25
        If StringLen($sText) >= 101 And StringLen($sText) <= 150 Then $Times = 2.5
        If StringLen($sText) >= 151 And StringLen($sText) <= 201 Then $Times = 3
        If StringLen($sText) >= 202 Then $Times = 3.25
        Return Round(StringLen($sText)*$Times)
    EndIf
EndFunc

Func ArraySortByLen(ByRef $nArray, $Start = 1)
	For $i = $Start To UBound($nArray) - 2
		Local $SE = $i
		For $x = $i To UBound($nArray) - 1
			If StringLen($nArray[$SE]) < StringLen($nArray[$x]) Then $SE = $x
		Next
		Local $HLD = $nArray[$i]
		$nArray[$i] = $nArray[$SE]
		$nArray[$SE] = $HLD
	Next
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


Отправлено: 17:01, 28-06-2007 | #114


Аватара для gregaz

Пользователь


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

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


Цитата:
Думаю не составит труда по тому же принципу написать аналоги FileOpenDialog() и FileSaveDialog().... конечно, если в этом есть необходимость
amel27,спасибо,но раз это сложно,то овчинка выделки не стоит
Мне это надо было в порядке изучения возможностей Autoit
А так понятно,что в принципе любой вопрос можно решить использованием того или другого языка

Отправлено: 19:22, 28-06-2007 | #115


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


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

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


Цитата:
Примерно так:


Код:

#include <Inet.au3>

$ExeFileToDownload = _INetGetSource("http://www.site.com/update.txt")
$ExeFileToDownload = StringStripWS($ExeFileToDownload, 3)
$ExeFileName = StringRegExpReplace($ExeFileToDownload, "^.*\\", "")

$Ret = InetGet($ExeFileToDownload, @TempDir & "\" & $ExeFileName, 1, 0)

If $Ret = 1 Then RunWait(@TempDir & "\" & $ExeFileName & ' /S')
почему то не качает файл

Отправлено: 04:10, 02-07-2007 | #116


Аватара для Creat0R

Must AutoIt


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

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


GTeam
Цитата:
почему то не качает файл
Используется прокси? попробуй также просмотреть переменную $ExeFileToDownload после второй строки... вот так:

Код: Выделить весь код
#include <Inet.au3>

$ExeFileToDownload = _INetGetSource("http://www.site.com/update.txt")
$ExeFileToDownload = StringStripWS($ExeFileToDownload, 3)

MsgBox(0, "", $ExeFileToDownload)
Что она содержит?

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

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

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:08, 02-07-2007 | #117


Ветеран


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

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


как из скрипта узнать список всех работающих служб в их сокращенном английском названии?
т.е. обработка вывода net start не пойдет - там полные русские, и чтение раздела реестра SERVICES тоже - оттуда невозможно узнать, какие службы запущены.

Отправлено: 12:15, 02-07-2007 | #118


Пользователь


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

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


Dirk Diggler
Цитата:
как из скрипта узнать список всех работающих служб в их сокращенном английском названии?
Можно через WMI:
Код: Выделить весь код
$strComputer = "."
$WMI=ObjGet("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$colServices = $WMI.ExecQuery("Select * from Win32_Service") 
For $o in $colServices 
MsgBox (0,"Всего служб: " & $colServices.Count ,$o.Name)
Next
Чтобы узнать какие ещё бывают свойтва кроме Name, можно воспользоваться следующим кодом:
Код: Выделить весь код
MsgBox(0, "Свойства:", GetClassProperty("root\cimv2","Win32_Service") )

Func GetClassProperty($strNameSpace,$strClass,$strComputer = ".")
	Local $ret
	$objClass = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
		$strComputer & "\" & $strNameSpace & ":" & $strClass)
	For $objClassProperty In $objClass.Properties_
		$ret=$ret & $objClassProperty.Name & @CRLF
	Next
	Return $ret
EndFunc
А с помощью этого кода можно получить названия методов:
Код: Выделить весь код
MsgBox(0,"Методы:", GetClassMethods("root\cimv2","Win32_Service") )

Func GetClassMethods($strNameSpace,$strClass,$strComputer = ".")
	Local $ret
	$objClass = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
		$strComputer & "\" & $strNameSpace & ":" & $strClass)
	For $objClassMethod In $objClass.Methods_
		$ret=$ret & $objClassMethod.Name & @CRLF
	Next
	Return $ret
EndFunc
Если нужно получить общее описание для этого класса:
Код: Выделить весь код
ClipPut(ListMOF("root\cimv2","Win32_Service"))
MsgBox(0,"","MOF-описание, скопировано в буфер обмена!")

Func ListMOF($strNameSpace,$strClass,$strComputer = ".")
Local Const $wbemFlagUseAmendedQualifiers = 0x20000
	$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
		$strComputer & "\" & $strNameSpace)
	$objClass = $objWMIService.Get($strClass, $wbemFlagUseAmendedQualifiers)
	$strMOF = $objClass.GetObjectText_
	Return $strMOF
EndFunc
P.S. К сожалению, я не знаю как получить mof-описание для каждого метода или свойства по отдельности
Если кто-то знает, пожалуйста подскажите...
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:44, 02-07-2007 | #119


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


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

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


Цитата:
#include <Inet.au3>

$ExeFileToDownload = _INetGetSource("http://www.site.com/update.txt")
$ExeFileToDownload = StringStripWS($ExeFileToDownload, 3)

MsgBox(0, "", $ExeFileToDownload)
Цитата:
Что она содержит?
нет, прокси не используется.
msgbox, выдает верный урл

Отправлено: 16:01, 02-07-2007 | #120



Компьютерный форум 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




 
Переход