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

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

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

(*.*)


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


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

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

 

Googler


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

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


Creat0R
Цитата:
как только скрипт завершает работу, окно свойств исчезает, не очень удобно... »
думал ты это понял из предыдущего примера с сетевым подключением, поэтому не стал заострять внимание... имхо такое поведение вполне логично, так как при выходе все открытые объекты закрываются, так что в некоторых случаях это даже полезно. Кстати, таким образом можно включать/отключать сетевые подключения - Shell-альтернатива DevCon.

Kenwood3D
Цитата Kenwood3D:
После запуска вылетает системное окно "Приложение или библиотека C:\WINDOWS\system32\irprops.cpl не является образом программы для Windows NT. Проверьте назначение установочного диска. " И выполнение зависает на строке "Sleep(1000)" »
1. на Sleep() скрипт не зависает, а входит в цикл ожидания ("Esc" - для выхода)... так как окно свойств будет открыто только до тех пор пока работает скрипт, вместо цикла можно поставить команды обработки этого окна.
2. Ошибка никак не связана со скриптом, ищи в сетевых настройках Windows, начать можно отсюда:
Появление сообщения об ошибке «RUNDLL Ошибка загрузки irprops.cpl» при загрузке Windows XP

Отправлено: 06:22, 14-11-2007 | #721



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

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


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
думал ты это понял из предыдущего примера с сетевым подключением
Я просто запустил пример, появилось окно свойств подключения, я нажал “Отмена” и затем убил скрипт - Познать сущность того примера, мне, на тот момент, не удалось .

Цитата:
такое поведение вполне логично, так как при выходе все открытые объекты закрываются, так что в некоторых случаях это даже полезно
100% согласен (с обеими утверждениями ), какое то чувство мне подсказывает, что именно такое поведение мне где нибудь пригодится..
Но пока, мне бы узнать о другом поведении, как это окно вызвать “на долго/навсегда” - может есть какой то API-метод? или возможно через CallBack функции как то?

Есть идея запускать отдельный скрипт, чтобы тот завершал работу только после закрытия диалога свойств, но это особо крайний вариант

P.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


Отправлено: 08:57, 14-11-2007 | #722


Googler


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

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


Creat0R

Цитата:
Есть идея запускать отдельный скрипт, чтобы тот завершал работу только после закрытия диалога свойств »
Цитата:
есть ещё вариант с созданием своего окна Свойства для файла, вроде встроенными функциями можно получить необходимую инфу »
не вижу разницы между этими вариантами - оба требуют работы скрипта, только во втором случае еще и ГУИ рисовать

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

Отправлено: 12:43, 14-11-2007 | #723


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


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

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


Цитата amel27:
HotKeySet("{Esc}", "OnExit")
_OpenConnProperties('Подключение по локальной сети')
While 1
Sleep(1000)
Wend
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
Func OnExit()
Exit
EndFunc »
Так а куда указаывать имя сетевого подключения, свойства которого я хочу открыть? У меня их то несколько. Мож из-за этого и не хочет? На другом компе работает, но там только одно сетевое подключение.

Отправлено: 18:05, 14-11-2007 | #724


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
не вижу разницы между этими вариантами - оба требуют работы скрипта
Ну в первом как бы остаётся иллюзия что скрипт завершил работу, а кокошко наместе - во-втором да, гуи рисовать нужно, но зато потом можно с этим окном делать что угодно (почти).

Цитата:
разве только добавится возможность делать новое окно дочерним к GUI
Это было бы неплохо, я в принципе догадываюсь что функция будет примерно такой, но и она у меня не работает:

Код: Выделить весь код
$GUI = GUICreate("My GUI")

GUISetState()
GUISetState(@SW_DISABLE)

_ShellExecuteEx(@DesktopDir & "\Test.txt", "", @DesktopDir, "properties", @SW_SHOW, $GUI)

Sleep(2000)

Func _ShellExecuteEx($sCmd, $Args="", $sFolder="", $Verb="", $rState=@SW_SHOWNORMAL, $hWnd=0)
    If StringRight($sCmd, 3) = "lnk" Then
        Local $iShortcutInfo = FileGetShortcut($sCmd)
        If IsArray($iShortcutInfo) Then $sCmd = $iShortcutInfo[0]
    EndIf

    Local $aRet = DllCall("shell32.dll", "long", "ShellExecute", _
        "hwnd", $hWnd, _
        "string", $Verb, _
        "string", $sCmd, _
        "string", $Args, _
        "string", $sFolder, _
        "int", $rState)
    If @error Then Return SetError(1, 0, 0)

    Local $RetVal = $aRet[0]
    If $RetVal > 32 Then Return SetError(0, 0, 1)
    Return SetError(2, 0, 0)
EndFunc
Kenwood3D
Цитата:
куда указаывать имя сетевого подключения
В качестве единственного параметра функции _OpenConnProperties()

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

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

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

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

Отправлено: 23:09, 14-11-2007 | #725


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


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

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


Цитата Creat0R:
В качестве единственного параметра функции _OpenConnProperties() »
Разобрался.
amel27, Creat0R, огромное СПАСИБО!

Отправлено: 01:26, 15-11-2007 | #726


Googler


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

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


Creat0R
Цитата:
в принципе догадываюсь что функция будет примерно такой, но и она у меня не работает »
а чего ты для UDF _ShellExecuteEx() используешь API-функцию ShellExecute?.. она как раз не поддерживает "properties"
Код: Выделить весь код
HotKeySet("{Esc}", "OnExit")
_ShellExecuteEx(@ScriptName, "", @ScriptDir, "properties")

While 1
    Sleep(500)
WEnd

  Func _ShellExecuteEx($sCmd, $Args = "", $sFolder = "", $Verb = "", $rState = @SW_SHOWNORMAL, $hWnd = 0)
    Local $struINFO = DllStructCreate("long;long;long;ptr;ptr;ptr;ptr;long;long;long;ptr;long;long;long;long")
    Local $struVerb = DllStructCreate("char[15];char")
    Local $struPath = DllStructCreate("char[255];char")
    Local $struArgs = DllStructCreate("char[255];char")
    Local $struWDir = DllStructCreate("char[255];char")
    ; Заполняем структуры параметров
    DllStructSetData($struVerb, 1, $Verb)
    If StringRight($sCmd, 3) = "lnk" Then
        Local $aShortcutInfo = FileGetShortcut($sCmd)
        If IsArray($aShortcutInfo) Then
             DllStructSetData($struPath, 1, $aShortcutInfo[0])
            DllStructSetData($struWDir, 1, $aShortcutInfo[1])
            DllStructSetData($struArgs, 1, $aShortcutInfo[2])
            $rState = $aShortcutInfo[6]
        Else
            Return 0
        Endif
    Else
        DllStructSetData($struPath, 1, $sCmd)
        DllStructSetData($struWDir, 1, $sFolder)
        DllStructSetData($struArgs, 1, $Args)
    EndIf
    ; Заполняем структуру SHELLEXECUTEINFO
    DllStructSetData($struINFO, 1, DllStructGetSize($struINFO))
    DllStructSetData($struINFO, 2, BitOR(0xC, 0x40, 0x400))
    DllStructSetData($struINFO, 3, $hWnd)
    DllStructSetData($struINFO, 4, DllStructGetPtr($struVerb))
    DllStructSetData($struINFO, 5, DllStructGetPtr($struPath))
    DllStructSetData($struINFO, 6, DllStructGetPtr($struArgs))
    DllStructSetData($struINFO, 7, DllStructGetPtr($struWDir))
    DllStructSetData($struINFO, 8, $rState)

    Local $ret = DllCall("shell32.dll", "int", "ShellExecuteEx", "ptr", DllStructGetPtr($struINFO))
    Return $ret[0]
EndFunc

Func OnExit()
    Exit
EndFunc
P.S. кста я про ярлыки и не подумал
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:08, 15-11-2007 | #727


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
а чего ты для UDF _ShellExecuteEx() используешь API-функцию ShellExecute?
Я пробовал ShellExecuteEx, но у меня почему то скрипт вываливался в тихом режиме (код выхода -1073741819).

Цитата:
я про ярлыки и не подумал
Я был удивлён когда узнал что родная ShellExecute не умеет запускать ярлыки , поэтому с того момента и до сих пор, юзаю самопальную ShellExecute (именуемую как просто _Execute() ).

P.S
Спасибо за функцию, работает, правда параметр $hWnd пользы не приносиит, по крайней мере не визуально - т.е задаю hWnd родительского окна, а диалог свойств появляется как отдельное окно, без связи с родительским.

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

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

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:26, 15-11-2007 | #728


Googler


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

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


Creat0R
Цитата:
параметр $hWnd пользы не приносиит »
угу, видимо он используется для других нужд... кста в MSDN сказано что-то типа - для месседж-боксов, которые могут возникнуть во время выполнения функции, что имелось ввиду неясно...

Отправлено: 07:38, 15-11-2007 | #729


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
видимо он используется для других нужд
Ладно, всё ровно спасибо, API для меня предпочтительнее объектов/WMI и т.п.




Самому как то давно (и кажется тут в ветке уже спрашивали про это), нужна была функция для получения текста с таба (SysTabControl321), поискал немного, не нашёл и разочаровался .
Но недавно кое кому тоже это понадобилось, и я сразу вспомнил про библиотеку A3LLibrary - Но ради одной функции включать такую тяжёлую артиллерию, мне показалось излишним ..

Собрав все нужные ресурсы с этой библиотеки, плюс немного с MSDN, плюс немного с головы (моей ), я написал рабочую функцию _ControlTab()!!! аж самому не верится, но всё прекрасно работает!

Вот функция с описаниями (на Английском, т.к на оф. форуме хочу предложить разработчикам для включения в стандартные библиотеки):

Код: Выделить весь код
;===============================================================================
; Function Name:   _ControlTab()
; Description:     Sends a command to a SysTab32 Control.
; Syntax:          _ControlTab ( $hWnd, $sText, $sCommand  [, $sParam1 [, $sParam2 [, $sParam3]]] )
;
; Parameter(s):    $hWnd       = Window Handle/Title.
;                  $sText      = Window Text.
;                  $sCommand   = Command to send to the control (See "Return Value(s)").
;                  $sParam1, $sParam2, $sParam3 = Additional parameters required by some commands.
;
; Requirement(s): None.
;
; Return Value(s): Depends on command as shown below. In case of an error (such as an invalid command or window/control), @error=1
;                       If $sCommand Equel...
;                          "GetItemState" - State of the tab item returned.
;                            ($sParam1 defines what tab item (zero-based) will be used - 0 is the default).
;
;                          "GetItemText" - Text of the tab item returned.
;                            ($sParam1 defines what tab item (zero-based) will be used - 0 is the default).
;
;                          "GetItemImage" - Image Index of the tab item returned.
;                            ($sParam1 defines what tab item (zero-based) will be used - 0 is the default).
;
;                          "CurrentTab" - Returns the current Tab shown of a SysTabControl32.
;
;                          "TabRight" - Moves to the next tab to the right of a SysTabControl32.
;
;                          "TabLeft" - Moves to the next tab to the left of a SysTabControl32.
;
;                          "GetTabsCount" - Returns the number of total tab items of a SysTabControl32.
;
;                          "FindTab" - Search For tab item with specific text..
;                          In this case used all three additional parameters:
;                               $sParam1 - defines what text to find.
;                               $sParam2 - defines from what tab item the search will start (zero-based).
;                               $sParam3 - defines search type...
;                               If $sParam3 = True Then will be performed a partial search of the string in the tab item text.
;
; Author(s):       G.Sandler a.k.a CreatoR
;
; Example(s):
;     $TabText = _ControlTab("Properties", "", "GetItemText", 1) ;Will return the text of second tab from the left side.
;===============================================================================
Func _ControlTab($hWnd, $sText, $sCommand, $sParam1="", $sParam2="", $sParam3="")
    Local Const $TCM_FIRST = 0x1300
    Local $hTab = ControlGetHandle($hWnd, $sText, "SysTabControl321")

    Switch $sCommand
        Case "GetItemState", "GetItemText", "GetItemImage"
            Local Const $TagTCITEM = "int Mask;int State;int StateMask;ptr Text;int TextMax;int Image;int Param"
            Local Const $TCIF_ALLDATA = 0x0000001B
            Local Const $TCM_GETITEM = $TCM_FIRST + 5

            Local $tBuffer  = DllStructCreate("char Text[4096]")
            Local $pBuffer  = DllStructGetPtr($tBuffer)
            Local $tItem    = DllStructCreate($tagTCITEM)
            Local $pItem    = DllStructGetPtr($tItem)

            DllStructSetData($tItem, "Mask", $TCIF_ALLDATA)
            DllStructSetData($tItem, "TextMax", 4096)
            DllStructSetData($tItem, "Text", $pBuffer)

            If $sParam1 = -1 Then $sParam1 = _ControlTab($hWnd, $sText, "CurrentTab")
            DllCall("user32.dll", "long", "SendMessage", "hwnd", $hTab, "int", $TCM_GETITEM, "int", $sParam1, "int", $pItem)

            If @error Then Return SetError(1, 0, "")
            If $sCommand = "GetItemState" Then Return DllStructGetData($tItem, "State")
            If $sCommand = "GetItemText" Then Return DllStructGetData($tBuffer, "Text")
            If $sCommand = "GetItemImage" Then Return DllStructGetData($tItem, "Image")
        Case "CurrentTab", "TabRight", "TabLeft"
            Local $iRet = ControlCommand($hWnd, $sText, "SysTabControl321", $sCommand, "")
            If @error Then Return SetError(1, 0, -1)
            Return $iRet - 1
        Case "GetTabsCount"
            Local Const $TCM_GETITEMCOUNT = $TCM_FIRST + 4
            Local $iRet = DllCall("user32.dll", "long", "SendMessage", "hwnd", $hTab, "int", $TCM_GETITEMCOUNT, "int", 0, "int", 0)
            If @error Then Return SetError(1, 0, -1)
            Return $iRet[0]
        Case "FindTab"
            If Not IsNumber($sParam2) Or $sParam2 < 0 Then $sParam2 = 0
            Local $sTabText

            For $i = $sParam2 To _ControlTab($hWnd, $sText, "GetTabsCount")
                $sTabText = _ControlTab($hWnd, $sText, "GetItemText", $i)
                If $sParam3 = True And StringInStr($sTabText, $sParam1) Then Return $i
                If $sTabText = $sParam1 Then Return $i
            Next
            Return -1
        Case Else
            Return SetError(1, 0, "")
    EndSwitch
EndFunc
Вот пример:

Код: Выделить весь код
$GUI = GUICreate("ControlTab Demo")

GUICtrlCreateTab(0, 20)
$Tab_1 = GUICtrlCreateTabItem("Tab 1")
$Tab_2 = GUICtrlCreateTabItem("Tab 2")
$Tab_3 = GUICtrlCreateTabItem("More Tab")

GUISetState()

For $i = 0 To _ControlTab($GUI, "", "GetTabsCount")-1
    MsgBox(0, "", "Zero-Based tab number [" & $i & "]: " & @LF & _ControlTab($GUI, "", "GetItemText", $i))
    _ControlTab($GUI, "", "TabRight")
Next

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

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

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


Отправлено: 23:38, 15-11-2007 | #730



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




 
Переход