[архив - Часть 2] AutoIt скрипты

Ответить
 • Просмотры: 13
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

Creat0R


Цитата:



как только скрипт завершает работу, окно свойств исчезает, не очень удобно...
[архив - Часть 2] AutoIt скрипты




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



Kenwood3D


Цитата Kenwood3D:



После запуска вылетает системное окно "Приложение или библиотека C:\WINDOWS\system32\irprops.cpl не является образом программы для Windows NT. Проверьте назначение установочного диска. " И выполнение зависает на строке "Sleep(1000)"
[архив - Часть 2] AutoIt скрипты




1. на Sleep() скрипт не зависает, а входит в цикл ожидания ("Esc" - для выхода)... так как окно свойств будет открыто только до тех пор пока работает скрипт, вместо цикла можно поставить команды обработки этого окна.

2. Ошибка никак не связана со скриптом, ищи в сетевых настройках Windows, начать можно отсюда:

Появление сообщения об ошибке «RUNDLL Ошибка загрузки irprops.cpl» при загрузке Windows XP
Аватара пользователя
Angelus

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Angelus »

Никто не в курсе как можно даную функцию (_IsPressed) заставить вести лог??, тоесть сохранять все нажатия клавиш в текстовом файле....
Аватара пользователя
Angelus

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Angelus »

Creat0R




Цитата:



Есть идея запускать отдельный скрипт, чтобы тот завершал работу только после закрытия диалога свойств
[архив - Часть 2] AutoIt скрипты





Цитата:



есть ещё вариант с созданием своего окна Свойства для файла, вроде встроенными функциями можно получить необходимую инфу
[архив - Часть 2] AutoIt скрипты




не вижу разницы между этими вариантами - оба требуют работы скрипта, только во втором случае еще и ГУИ рисовать Изображение



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

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

Цитата 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
[архив - Часть 2] AutoIt скрипты




Так а куда указаывать имя сетевого подключения, свойства которого я хочу открыть? У меня их то несколько. Мож из-за этого и не хочет? На другом компе работает, но там только одно сетевое подключение.
Аватара пользователя
MaxxQ

Re: [архив - Часть 2] AutoIt скрипты

Сообщение MaxxQ »

Maza Faka, у меня еще один вопрос возник в процессе использования скрипта Изображение , как добавить в него суммы исключения, к примеру что бы по появлении суммы равной 6666666666, 777777777, 8888888888 нечего не происходило бы??????

Спасибо
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

Цитата Creat0R:



В качестве единственного параметра функции _OpenConnProperties()
[архив - Часть 2] AutoIt скрипты




Разобрался.

amel27, Creat0R, огромное СПАСИБО!
Аватара пользователя
MaxxQ

Re: [архив - Часть 2] AutoIt скрипты

Сообщение MaxxQ »

Creat0R
Цитата:



в принципе догадываюсь что функция будет примерно такой, но и она у меня не работает
[архив - Часть 2] AutoIt скрипты




а чего ты для 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. кста я про ярлыки и не подумал Изображение
Аватара пользователя
MaxxQ

Re: [архив - Часть 2] AutoIt скрипты

Сообщение MaxxQ »

Доброго времени суток.

Подскажите пожалуйста.

Необходимо программно отркрыть окно свойства одного из сетевого подключения (через AutoIt). К примеру, чтобы открыть "Сетевые подключения" необходимо выполнить ::{7007acc7-3202-11d1-aad2-00805fc1270e}, а что надо выполнить чтобы открыть свойства или состояние конкретного подключения?

Есть способ через rasphone.exe -f "C:\Documents and Settings\All Users\Application Data\Microsoft\Network\Connections\Pbk\rasphone.pbk" -e "Inet", но так открывает только VPN-соединение "Inet", а подключение по локальной сети не хочет.
Аватара пользователя
Dementei

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Dementei »

Creat0R


Цитата:



параметр $hWnd пользы не приносиит
[архив - Часть 2] AutoIt скрипты




угу, видимо он используется для других нужд... кста в MSDN сказано что-то типа - для месседж-боксов, которые могут возникнуть во время выполнения функции, что имелось ввиду неясно... Изображение
Аватара пользователя
amel27

Re: [архив - Часть 2] AutoIt скрипты

Сообщение amel27 »

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 

Вот пример:





Код:

Код: Выделить всё

$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
Ответить

Вернуться в «AutoIt»