Войти

Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [43] 44 45 46 47 48 49 50

Creat0R
11-12-2007, 00:36
HORRIBLE,
зачем $file заключать в 3-ые ковычки?
Это двойные кавычки (одна одиночная и одна двойная), заключать в кавычки нужно, чтобы если путь содержит пробелы, небыло проблем при попытке запуска.

[hr]

All

Нужна срочно помощь по RegExp...

Никак немогу получить массив со всеми совпадениями между двух символов ($), но при это должно учитываться, что нужный нам текст, должен содержать только допустимые для переменной символы, а именно A-Z, 0-9, и _ (вроде больше ничего не допускается).

Чтобы проще понять что мне нужно, покажу что я пытаюсь сделать на примере:

#include <Array.au3>

$String = "This is <$Var$> and this is <$Str$>"
$Array = StringRegExp($String, "(?i).*?\$(.*?[0-9a-z_])\$.*?", 3)

_ArrayDisplay($Array)

Тут всё отлично, получаем массив, где [0] = Var, а [1] = Str, если убрать символ $ у последнего значения...

$String = "This is <$Var$> and this is <$Str>"

То тоже нормально, получаем только [0] = Var, но если убрать $ у первого значения..

$String = "This is <$Var> and this is <$Str$>"

То получим совсем не то что нужно (нужно только Str)... сколько я не мучался, но казалось бы, вроде такую простую задачу, решить не смог :(.

Creat0R
11-12-2007, 01:46
Нашёл!!! :yahoo:

#include <Array.au3>

$String = "This is <$Var> and this is <$Str$>"
$Array = StringRegExp($String, "\$((?i)[0-9a-z_]+)\$", 3)

_ArrayDisplay($Array)

А ведь так просто оказалось :).

Мне это нужно было для функции _ExpandVarStrings() - позволяет расширять переменные (не включая макросы) в любом виде, даже такие: "$Var".

Пример и сама функция:

$Var = "Our Value"
$Str = "Our String"

;================= Example with $iMode = -1, default - Only $String$ expanded =================
$sString = "This is <$Var$> and this is <$Str$>"
$ExpandedStr = _ExpandVarStrings($sString, -1)

MsgBox(64, "Expand Var Strings", "Was:" & @LF & $sString & @LF & @LF & "Expanded:" & @LF & $ExpandedStr)
;=================================================================================================== =======

;================= Example with $iMode = 1, Only $String expanded =================
$sString = "$Var goes here, and $Str goes here"
$ExpandedStr = _ExpandVarStrings($sString, 1)

MsgBox(64, "Expand Var Strings", "Was:" & @LF & $sString & @LF & @LF & "Expanded:" & @LF & $ExpandedStr)
;=================================================================================================== =======

;================= Example with $iMode = 2, All strings expanded ($String and $String$) =================
$sString = "$Var not equel $Str$"
$ExpandedStr = _ExpandVarStrings($sString, 2)

MsgBox(64, "Expand Var Strings", "Was:" & @LF & $sString & @LF & @LF & "Expanded:" & @LF & $ExpandedStr)
;=================================================================================================== =======

;===============================================================================
; Function Name: _ExpandVarStrings()
; Description: Expand string variables inside string (using different modes).
; Parameter(s): $sString - String that contain variables that need to be expanded.
; $iMode - Define the expand mode...
; -1 - (default) will expand only $Var$ strings.
; 1 - will expand only $Var strings.
; 2 - will expand $Var$ and $Var strings.
; Requirement(s): None.
; Return Value(s): On success - Return initial string with expanded variables.
;
; On failure - If $sString not contain string variables that need to be expanded (according to $iMode),
; will returned initial $sString.
;
; Author(s): G.Sandler (a.k.a CreatoR)
;===============================================================================
Func _ExpandVarStrings($sString, $iMode=-1)
Local $aExtractStrs, $sPattern, $sEval
Local $sRetStr = $sString

Switch $iMode
Case 1
$sPattern = "(?i)(\$[0-9a-z_]+)"
Case 2
$sPattern = "(?i)(\$[0-9a-z_]+\$)|(\$[0-9a-z_]+)"
Case Else
$sPattern = "(?i)(\$[0-9a-z_]+\$)"
EndSwitch

Local $aExtractStrs = StringRegExp($sString, $sPattern, 3)
If Not IsArray($aExtractStrs) Then Return $sRetStr

For $i = 0 To UBound($aExtractStrs)-1
$sEval = Eval(StringReplace($aExtractStrs[$i], "$", ""))
If $sEval <> "" Then $sRetStr = StringReplace($sRetStr, $aExtractStrs[$i], $sEval)
Next

Return $sRetStr
EndFunc

Для макросов нужно ещё немного помучать функцию...

Creat0R
11-12-2007, 03:03
Нашёл вроде багу в Opt("ExpandVarStrings", 1)...

Opt("ExpandVarStrings", 1)

$Var = "Some data"
$String = "$Str and $Var$"

MsgBox(0, "", $String)

Переменная не расширяется, но если мы добавим символ $ после $Str, то всё расширяется нормально (не зависимо от того, есть ли такая переменная):

Opt("ExpandVarStrings", 1)

$Var = "Some data"
$String = "$Str$ and $Var$"

MsgBox(0, "", $String)

Моя функция обходит эту багу :yu: , и вот кстати версия поддерживающая макросы:

;===============================================================================
; Function Name: _ExpandVarStrings()
; Description: Expand string variable/macro inside string (using different modes).
; Parameter(s): $sString - String that contain variables that need to be expanded.
; $iMode - Define the expand mode...
; -1 - (default) will expand only $Var$/@Macro@.
; 1 - will expand only $Var/@Macro.
; 2 - will expand $Var$/@Macro@ and $Var/@Macro.
; Requirement(s): None.
; Return Value(s): On success - Return initial string with expanded variables.
;
; On failure - If $sString not contain string variables that need to be expanded (according to $iMode),
; will returned initial $sString.
;
; Author(s): G.Sandler (a.k.a CreatoR)
;===============================================================================
Func _ExpandVarStrings($sString, $iMode=-1)
Local $aExtractStrs, $sPattern, $sEval, $Old_Opt_EVS
Local $sRetStr = $sString, $sExpndStr = ""
Local $aSymbExpnd[2] = ["$", "@"]

For $i = 0 To 1
Switch $iMode
Case 1
$sPattern = "(?i)(\" & $aSymbExpnd[$i] & "[0-9a-z_]+)"
Case 2
$sPattern = "(?i)(\" & $aSymbExpnd[$i] & "[0-9a-z_]+\" & $aSymbExpnd[$i] & ")|(\" & $aSymbExpnd[$i] & "[0-9a-z_]+)"
Case Else
$sPattern = "(?i)(\" & $aSymbExpnd[$i] & "[0-9a-z_]+\" & $aSymbExpnd[$i] & ")"
EndSwitch

Local $aExtractStrs = StringRegExp($sString, $sPattern, 3)
If Not IsArray($aExtractStrs) Then ContinueLoop

For $iE = 0 To UBound($aExtractStrs)-1
If $i = 0 Then
$sEval = Eval(StringReplace($aExtractStrs[$iE], $aSymbExpnd[$i], ""))
If $sEval <> "" Then $sRetStr = StringReplace($sRetStr, $aExtractStrs[$iE], $sEval)
ElseIf $iMode <> -1 Or StringRight($aExtractStrs[$iE], 1) = $aSymbExpnd[$i] Then
$sExpndStr = $aExtractStrs[$iE]
If StringRight($sExpndStr, 1) <> $aSymbExpnd[$i] Then $sExpndStr &= $aSymbExpnd[$i]
$Old_Opt_EVS = Opt("ExpandVarStrings", 1)
$sExpndStr = $sExpndStr
Opt("ExpandVarStrings", $Old_Opt_EVS)
If $aExtractStrs[$iE] <> "" Then $sRetStr = StringReplace($sRetStr, $aExtractStrs[$iE], $sExpndStr)
EndIf
Next
Next

Return $sRetStr
EndFunc

Вроде работает :)

Kenwood3D
11-12-2007, 03:31
Creat0R
Kenwood3D, Для переключения вкладок, можно использовать мою UDF _ControlTab(), и указывать текст в качестве идентификатора...
Спасибо.
А как на счет выбора компонента в окне свойство "Подключение по локальной сети" без использования имитации нажатия клавиш и мыши?

Creat0R
11-12-2007, 04:37
Kenwood3D,
как на счет выбора компонента в окне свойство "Подключение по локальной сети"
Какого компонента? возможно есть метод запускать отдельно.

amel27
11-12-2007, 06:40
Kenwood3D
вот пример изменения состояния компонента:#Include <GuiListView.au3>

$Name = "Клиент для сетей Microsoft"
$hWnd = WinGetHandle("Подключение по локальной сети")
If Not @error Then
$hSLV = ControlGetHandle($hWnd, "", "SysListView321")
If Not @error Then
_SysListViewToggle($hSLV, $Name)
MsgBox(48, '', 'Состояние элемента "'& $Name &'" изменено')
EndIf
EndIf

Func _SysListViewToggle($hSLV, $sText)
Local $idx = _GUICtrlListView_FindInText($hSLV, $sText)
_GUICtrlListView_SetItemSelected ($hSLV, $idx)
_GUICtrlListView_SetItemFocused ($hSLV, $idx)
ControlSend($hWnd, "", "SysListView321", "{SPACE}")
EndFunc
все-таки какую задачу должен решать скрипт?

TERMINAL
11-12-2007, 09:57
HORRIBLE, Мало ли, может захочишь установку делать с ключами...
RunWait ( 'msiexec /i "'&$file&'" /L1049 /S /v/qn')

amel27, Creat0R, помогите сделать скрипт плз.... Нужно определить операционку, если VISTA выдаёт сообщение, если XP выдаёт сообщение. (сам бы сделал, но нет под рукой ВИСТЫ, может Вы вкурсе по каким файлам можно определять.....)
Я использовал If @OSType="WIN32_NT" Then.... , но почему то не определяется ВИСТА (наверно рна тоже относится к @OSType="WIN32_NT"). Заранее СПС!

Creat0R, ты мне давал скрипт который выполняет копирование папки с показателем времени от винды...
1. Нужно сделать так-если файлы есть - перезаписывать...
2. Возможно ли сделать на скрипте чтобы показывало остаток времени (вообщем как в винде)

*автор скрипта возможно и amel27, но разговор был с тобой....

Creat0R
11-12-2007, 10:25
TERMINAL,
Нужно определить операционку
Из справки:

@OSVersion - Returns one of the following: "WIN_VISTA", "WIN_2003", "WIN_XP", "WIN_2000", "WIN_NT4", "WIN_ME", "WIN_98", "WIN_95"

;)

ты мне давал скрипт который выполняет копирование папки с показателем времени от винды
Ну, я многое мог давать, я не помню о чём именно речь, или ссылку приведи, или скрипт что я давал :)

Возможно ли сделать на скрипте чтобы показывало остаток времени
Наверное можно.

TERMINAL
11-12-2007, 10:27
Creat0R, Ща нарою, не убегай...

Вот на этой (http://forum.oszone.net/showthread.php?p=651133&highlight=i386#post651133) страничке наше обсуждение, но всё что ты писал я копировал в Autolt и у меня вылазила целая куча ошибок (пробовал только что на свежей версии-непомогает).... Сразу говорю-мне нужно скопировать с диска папку i386 на С диск...

Creat0R
11-12-2007, 10:57
TERMINAL,
вылазила целая куча ошибок
Каких?

Вот это разве не делает то что нужно:

_CopyWithProgress("D:\i386", "C:\i386", $FOR_COPY, BitOR($FOF_NOCONFIRMMKDIR, $FOF_NOCONFIRMATION))

Функции отсюда (http://forum.oszone.net/showthread.php?t=60616&page=153&highlight=i386#post651383).

TERMINAL
11-12-2007, 11:08
Creat0R, для теста скопировал и переделал на - _CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY, BitOR($FOF_NOCONFIRMMKDIR, $FOF_NOCONFIRMATION))

Вот какие ошибки...
C:\test.au3(1,48) : WARNING: $FOR_COPY: possibly used before declaration.
_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\test.au3(1,75) : WARNING: $FOF_NOCONFIRMMKDIR: possibly used before declaration.
_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY, BitOR($FOF_NOCONFIRMMKDIR,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\test.au3(1,96) : WARNING: $FOF_NOCONFIRMATION: possibly used before declaration.
_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY, BitOR($FOF_NOCONFIRMMKDIR, $FOF_NOCONFIRMATION)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\test.au3(1,48) : ERROR: $FOR_COPY: undeclared global variable.
_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\test.au3(1,97) : ERROR: _CopyWithProgress(): undefined function.
_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY, BitOR($FOF_NOCONFIRMMKDIR, $FOF_NOCONFIRMATION))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\test.au3 - 2 error(s), 3 warning(s)

Надпись внизу
>"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\test.au3" /autoit3dir "C:\Program Files\AutoIt3" /UserParams
+>10:04:40 Starting AutoIt3Wrapper v.1.9.2
>Running AU3Check (1.54.3.0) from:C:\Program Files\AutoIt3
C:\test.au3(1,48) : WARNING: $FOR_COPY: possibly used before declaration.
_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\test.au3(1,75) : WARNING: $FOF_NOCONFIRMMKDIR: possibly used before declaration.
_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY, BitOR($FOF_NOCONFIRMMKDIR,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\test.au3(1,96) : WARNING: $FOF_NOCONFIRMATION: possibly used before declaration.
_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY, BitOR($FOF_NOCONFIRMMKDIR, $FOF_NOCONFIRMATION)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\test.au3(1,48) : ERROR: $FOR_COPY: undeclared global variable.
_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\test.au3(1,97) : ERROR: _CopyWithProgress(): undefined function.
_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY, BitOR($FOF_NOCONFIRMMKDIR, $FOF_NOCONFIRMATION))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\test.au3 - 2 error(s), 3 warning(s)
!>10:04:40 AU3Check ended.rc:2
+>10:06:25 AutoIt3Wrapper Finished
>Exit code: 0 Time: 105.462

а за @OSVersion большое СПС !

Creat0R
11-12-2007, 11:41
TERMINAL,
Вот какие ошибки...
Эти ошибки говорят о том, что функция использовалась без констант, и без самой функции включённой в скрипт :)

Нужно так:

;Тут нужные константы
#Region consts
Global Const $FOR_MOVE = 0x0001
Global Const $FOR_COPY = 0x0002
Global Const $FOR_DELETE = 0x0003
Global Const $FOR_RENAME = 0x0004

Global Const $FOF_MULTIDESTFILES = 0x0001
Global Const $FOF_CONFIRMMOUSE = 0x0002
Global Const $FOF_SILENT = 0x0004
Global Const $FOF_RENAMEONCOLLISION = 0x0008
Global Const $FOF_NOCONFIRMATION = 0x0010
Global Const $FOF_WANTMAPPINGHANDLE = 0x0020
Global Const $FOF_ALLOWUNDO = 0x0040
Global Const $FOF_FILESONLY = 0x0080
Global Const $FOF_SIMPLEPROGRESS = 0x0100
Global Const $FOF_NOCONFIRMMKDIR = 0x0200
Global Const $FOF_NOERRORUI = 0x0400
Global Const $FOF_NOCOPYSECURITYATTRIBS = 0x0800
Global Const $FOF_NORECURSION = 0x1000
Global Const $FOF_NO_CONNECTED_ELEMENTS = 0x2000
Global Const $FOF_WANTNUKEWARNING = 0x4000
Global Const $FOF_NORECURSEREPARSE = 0x8000
#Endregion consts
;

_CopyWithProgress("D:\$OEM$", "C:\9", $FOR_COPY, BitOR($FOF_NOCONFIRMMKDIR, $FOF_NOCONFIRMATION))

;Это функция, без которой ничего работать не будет ;)
Func _CopyWithProgress($sFrom, $sTo, $OPERATION_MODE, $GENERAL_MODE)
; version 1 by SumTingWong on 5/26/2006
; http://www.autoitscript.com/forum/index.php?showtopic=11888
; updated by lod3n on 6/5/2007

Local $SHFILEOPSTRUCT
Local $pFrom
Local $pTo
Local $aDllRet
Local $nError = 0
Local $i

If FileExists($sTo) And StringRight($sFrom, 3) <> "*.*" And StringInStr(FileGetAttrib($sFrom), "D") Then $sFrom &= "\*.*"

$SHFILEOPSTRUCT = DllStructCreate("int;uint;ptr;ptr;uint;int;ptr;ptr")
If @error Then Return "nostruct"
; hwnd
DllStructSetData($SHFILEOPSTRUCT, 1, 0)
; wFunc
DllStructSetData($SHFILEOPSTRUCT, 2, $OPERATION_MODE)
; pFrom
$pFrom = DllStructCreate("char[" & StringLen($sFrom) + 2 & "]")
; pFrom will now be null-terminated at StringLen($sFrom)+1
DllStructSetData($pFrom, 1, $sFrom)
For $i = 1 To StringLen($sFrom) + 2
If DllStructGetData($pFrom, 1, $i) = 10 Then DllStructSetData($pFrom, 1, 0, $i)
Next
; We need a second null at the end
DllStructSetData($pFrom, 1, 0, StringLen($sFrom) + 2)
DllStructSetData($SHFILEOPSTRUCT, 3, DllStructGetPtr($pFrom))
; pTo
$pTo = DllStructCreate("char[" & StringLen($sTo) + 2 & "]")
; pTo will now be null-terminated at StringLen($sTo)+1
DllStructSetData($pTo, 1, $sTo)
; We need a second null at the end
DllStructSetData($pTo, 1, 0, StringLen($sTo) + 2)
DllStructSetData($SHFILEOPSTRUCT, 4, DllStructGetPtr($pTo))
; fFlags
DllStructSetData($SHFILEOPSTRUCT, 5, $GENERAL_MODE)
; fAnyOperationsAborted
DllStructSetData($SHFILEOPSTRUCT, 6, 0)
; hNameMappings
DllStructSetData($SHFILEOPSTRUCT, 7, 0)
; lpszProgressTitle
DllStructSetData($SHFILEOPSTRUCT, 8, 0)
$aDllRet = DllCall("shell32.dll", "int", "SHFileOperation", "ptr", DllStructGetPtr($SHFILEOPSTRUCT))
$retcode = $aDllRet[0]
$pFrom = 0
$pTo = 0
$SHFILEOPSTRUCT = 0
If $retcode <> 0 Then
SetError($nError)
Return False
EndIf
Return True
EndFunc ;==>_CopyWithProgress

TERMINAL
11-12-2007, 12:00
Creat0R, сори, протупил...всё получилось, но копирование происходит в верхнем левом углу
(можно в другое место?)
А хотелось бы, чтобы выглядело это так
GUICreate("Копирование...", 520, 60)
GUICtrlCreateLabel("Выполняется подготовка дистрибутива Windows XP Professional Edition Service Pack 2 Plus", 30, 20)
GUISetState(@SW_SHOW)
Sleep(5000)

и ниже после Выполняется подготовка дистрибутива Windows XP Professional Edition Service Pack 2 Plus шла шкала и время копирования....
примерно я хочу так
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Копирование...", 633, 103, 193, 125)
$Label1 = GUICtrlCreateLabel("Выполняется подготовка дистрибутива Windows XP Professional Edition Service Pack 2 Plus", 80, 16, 463, 17)
$Progress1 = GUICtrlCreateProgress(80, 40, 462, 17)
$Label2 = GUICtrlCreateLabel("до окончания копирования осталось - 3 мин.38 сек.", 176, 64, 268, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd

Kenwood3D
11-12-2007, 12:57
amel27
вот пример изменения состояния компонента:
Код:
#Include <GuiListView.au3>
$Name = "Клиент для сетей Microsoft"
$hWnd = WinGetHandle("Подключение по локальной сети")
If Not @error Then
$hSLV = ControlGetHandle($hWnd, "", "SysListView321")
If Not @error Then
_SysListViewToggle($hSLV, $Name)
MsgBox(48, '', 'Состояние элемента "'& $Name &'" изменено')
EndIf
EndIf
Func _SysListViewToggle($hSLV, $sText)
Local $idx = _GUICtrlListView_FindInText($hSLV, $sText)
_GUICtrlListView_SetItemSelected ($hSLV, $idx)
_GUICtrlListView_SetItemFocused ($hSLV, $idx)
ControlSend($hWnd, "", "SysListView321", "{SPACE}")
EndFunc
все-таки какую задачу должен решать скрипт? »

Необходимо открыть свойство компонента "Протокол Интернета (TCP/IP)"

$ConnPropTitle = 'Подключение по локальной сети'
$TabText = "Проверка"
_OpenConnProperties($ConnPropTitle)
WinWait($ConnPropTitle)
$iIndex = _ControlTab($ConnPropTitle, "", "FindTab", $TabText, "", True)
_ControlTab($ConnPropTitle, "", "TabSelect", $iIndex)
Sleep(2500)
Func _OpenConnProperties($sConnName)
Local $oShellApp = ObjCreate('shell.application')
Local $oCP = $oShellApp.Namespace (3), $Item
For $Item In $oCP.Items
If $Item.name = 'Сетевые подключения' Then
For $Item In $Item.Getfolder.Items
If $Item.name = $sConnName Then $Item.InvokeVerb ('Сво&йства')
Next
EndIf
Next
EndFunc »
Creat0R
я так понимаю что $TabText = "название закладки". Если это так то в моем случае я делаю так $TabText="Дополнительно", но скрипт не переключает на данную закладку.

Creat0R
11-12-2007, 17:07
TERMINAL, примерно я хочу так
Нужно либо использовать ещё один процесс (криво получится), либо создать своё окно и механизм копирования (тоже криво, но зато многими параметрами можно управлять).
У меня уже есть рабочий механизм (кажется даже приводил уже здесь), но для твоей задачки нужно немного переделать, если такой вариант подходит, позже выложу.


Kenwood3D, Необходимо открыть свойство компонента "Протокол Интернета (TCP/IP)"
Можно просто выбрать эту строку и нажать на кнопку “Свйоства” :) ...

$ConnPropTitle = 'Подключение по локальной сети'
$Name = "Протокол Интернета (TCP/IP)"

_OpenConnProperties($ConnPropTitle)

WinWait($ConnPropTitle)

$Index = ControlListView($ConnPropTitle, "", "SysListView321", "FindItem", $Name)
ControlListView($ConnPropTitle, "", "SysListView321", "Select", $Index)
ControlClick($ConnPropTitle, "", "Button4")

Sleep(2500)

Func _OpenConnProperties($sConnName)
Local $oShellApp = ObjCreate('shell.application')
Local $oCP = $oShellApp.Namespace (3), $Item
For $Item In $oCP.Items
If $Item.name = 'Сетевые подключения' Then
For $Item In $Item.Getfolder.Items
If $Item.name = $sConnName Then $Item.InvokeVerb ('Сво&йства')
Next
EndIf
Next
EndFunc

скрипт не переключает на данную закладку
Странно, у меня переключает... попробуй $TabText = "Допол" - или указать точное имя и заменить True на False (последний параметр в функции _ControlTab()).

Kenwood3D
12-12-2007, 00:15
Странно, у меня переключает... попробуй $TabText = "Допол" - или указать точное имя и заменить True на False (последний параметр в функции _ControlTab()). »
Уже так делал, ни одну закладку не хочет включать.
$iIndex = _ControlTab($ConnPropTitle, "", "FindTab", $TabText, "", True) и всегда равняется 0


Можно просто выбрать эту строку и нажать на кнопку “Свйоства” ...
Код:
$ConnPropTitle = 'Подключение по локальной сети'
$Name = "Протокол Интернета (TCP/IP)"
_OpenConnProperties($ConnPropTitle)
WinWait($ConnPropTitle)
$Index = ControlListView($ConnPropTitle, "", "SysListView321", "FindItem", $Name)
ControlListView($ConnPropTitle, "", "SysListView321", "Select", $Index)
ControlClick($ConnPropTitle, "", "Button4")
Sleep(2500)
Func _OpenConnProperties($sConnName)
Local $oShellApp = ObjCreate('shell.application')
Local $oCP = $oShellApp.Namespace (3), $Item
For $Item In $oCP.Items
If $Item.name = 'Сетевые подключения' Then
For $Item In $Item.Getfolder.Items
If $Item.name = $sConnName Then $Item.InvokeVerb ('Сво&йства')
Next
EndIf
Next
EndFunc »
То что надо! Спасибо!

:) Может тогда еще подскажите как в "Подключение по локальной сети - свойства" -> Настроить -> "Свойства: " выбрать закладку "Дополнительно" и там выбрать свойство "Сетевой адрес"? А то видемо из-за закладок не могу определить ClassNameNN списка.

TERMINAL
12-12-2007, 11:01
Creat0R, ок, буду ждать... А выглядеть будет так как я хотел?

SergeyAV
12-12-2007, 15:29
Народ, подскажите плииз - не могу понять в чем дело. Сделал скрипт для автоматической установки AutoCAD 2006 Russian:
; User Var's
$SF_1 = "setup.exe" ; Setup File Name
$UR_1 = "xxx" ; User Registration Code Part 1
$UR_2 = "xxxxxxxx" ; User Registration Code Part 2
$UR_3 = "Name" ; User Registration Name
$UR_4 = "o" ; User Registration Surname
$UR_5 = "Firme" ; User Registration Organization
$UR_6 = "o" ; User Registration Supplier
$UR_7 = "o" ; User Registration Phone No.


Run($SF_1)

; Welcome
WinWaitActive ("Установка Autodesk","Перед установкой AutoCAD 2006 ","Button1")
ControlClick ("Установка Autodesk","Перед установкой AutoCAD 2006 ","Button1")
WinWaitActive ("Установка AutoCAD 2006","Добро пожаловать в Мастер уста","Button1")
Sleep ( 5000 )
ControlClick ("Установка AutoCAD 2006","Добро пожаловать в Мастер уста","Button1")

; License
WinWait("Установка AutoCAD 2006","Страна или территори")
WinWaitActive("Установка AutoCAD 2006","Страна или территори")
Sleep ( 2000 )
Send("{TAB}{TAB}{UP}{ENTER}")

; Serial
WinWait("Установка AutoCAD 2006","Серийный номер ")
WinWaitActive("Установка AutoCAD 2006","Серийный номер ")
Sleep ( 1550 )
SEND ( $UR_1 )
Sleep ( 250 )
SEND ( $UR_2 )
ControlClick ( "Установка AutoCAD 2006", "", "Button1" )

; User Information
WinWait("Установка AutoCAD 2006","Укажите в полях этог")
WinWaitActive("Установка AutoCAD 2006","Укажите в полях этог")
Sleep ( 1250 )
SEND ( $UR_3 )
SEND ("{TAB}")
SEND ( $UR_4 )
SEND ("{TAB}")
SEND ( $UR_5 )
SEND ("{TAB}")
SEND ( $UR_6 )
SEND ("{TAB}")
SEND ( $UR_7 )
SEND ("{TAB}")

;ControlClick ( "Установка AutoCAD 2006", "", "Button4" )
Send("{ENTER}")
Sleep ( 250 )
Send("{ENTER}")
Sleep ( 250 )
Send("{ENTER}")
Sleep ( 250 )
Send("{ENTER}")
Sleep ( 250 )
Send("{ENTER}")
Sleep ( 250 )
Send("{ENTER}")

; Install Ends
WinWait( "Установка AutoCAD 2006","В&ывести файл Readme")
WinWaitActive( "Установка AutoCAD 2006","В&ывести файл Readme")
ControlClick ( "Установка AutoCAD 2006", "", "Button1" )
Sleep(1000)
Send("{SPACE}")
Send("{ENTER}")

Exit на основе скрипта для установки AutoCAD 2005, взятым на форуме MSFN. Для мониторинга вводимых команд использовал ScriptWriter. Все вроде работает, НО... только с жесткого диска :weep:.
При попытке запустить установку с DVD-ROM (одновременно с Unattended-установкой Windows), все срубается. Такое ощущение, что "кто-то" (что-то) жмёт на клавиши раньше записанных действий, и весь автоматизм нарушается. Попытки отмониторить весь процес уже при установке с DVD-ROM к успеху не привели - ScriptWriter тупо зависает, и не дает сохранить лог действий. Ничего больше в голову не приходит - я в AutoIT начинающий. И ведь при установке с винта все РАБОТАЕТ БЕЗ ПРОБЛЕМ - пробовал на разных компах...
Что тут можно посоветовать?
И еще. При выполнении даже скомпиленного AutoIT-скрипта в трее остается значок, который продолжает "висеть", когда весь процесс нарушается (Script paused). Этого можно как-нибудь избежать? В опциях компиллера (Aut2Exe) я ничего об этом не нашел :shuffle:. Дело в том, что из-за этого нарушается весь процесс дальнейшей установки...

Creat0R
12-12-2007, 18:23
Прикрепляю первую версию самодельной функции для копирования папок вместе с их содержимым...

Две проблемы которые нужно решить:

1) Более точный подсчёт оставшегося до окончания копирования времени (мне кажтся у меня вообще неверный подсчёт, делал давно).

2) AVI-Анимация останавливается на время копирования большого файла - это можно было бы решить если создание всего GUI повесить на отдельный скрипт, но тогда будет висеть два процесса для одной задачи :(.

P.S
В скрипте используются много CallBack-вызовов.. что может повлиять на нагрузку памяти на время копирования.

Для примера нужно распаковать архив, открыть файл Copy With Progress Example.au3, и выставить нужные пути.
В самой функции (в качестве параметров) можно указать размеры окна и его местоположение на экране.

TERMINAL,
А выглядеть будет так как я хотел?
Посколько оболочка это самодельный GUI, то выглядеть может как угодно ;)

Creat0R
12-12-2007, 18:29
SergeyAV, Такое ощущение, что "кто-то" (что-то) жмёт на клавиши раньше записанных действий
Нужно везде ставить проверки, на существования окна, активность окна, и т.п.
А также все Send() наверняка можно переделать в ControlClick, но точно сказать немогу, негде проверить.

Этого можно как-нибудь избежать?
Да, в начало скрипта поставь #NoTrayIcon :)




© OSzone.net 2001-2012