[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

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

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение leprecon »

Сама программа - нет, скрипт по эмуляции работы человека - на AutoIT
Аватара пользователя
Maza Faka

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Maza Faka »

amel27,

Нужна твоя помощь Изображение Необходимо получить список компьютеров локальной сети, в принципе решение есть (твой скрипт для Nicklock-a), но из "спортивного" интереса хотелось бы получить список с помощью нижеуказанных функций:



Код:

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

Global Const $RESOURCE_CONTEXT   = 0x5
Global Const $RESOURCETYPE_DISK  = 0x1
Global Const $NO_ERROR              = 0
Global Const $ERROR_NO_MORE_ITEMS   = 259
Global Const $ERROR_INVALID_ADDRESS = 487
$lpBuffer = DllStructCreate("dword[16384]")
$pBuffer = DllStructCreate("hwnd")
$aRet = DllCall("mpr.dll", "dword", "WNetOpenEnum", "dword", $RESOURCE_CONTEXT, "dword", $RESOURCETYPE_DISK, "dword", 0, "ptr", 0, _
                "ptr", DllStructGetPtr($pBuffer))
If $aRet[0]  $NO_ERROR Then
    MsgBox(16, "Error", "Dll call error")
    Exit
EndIf
$hWnd = DllStructGetData($pBuffer, 1)
$aRet = DllCall("mpr.dll", "int", "WNetEnumResource", "hwnd", $hWnd, "dword", -1, _
                "ptr", DllStructGetPtr($lpBuffer), "dword", DllStructGetSize($lpBuffer))
ConsoleWrite("!> Ret: " & $aRet[0] & @LF)
DllCall("mpr.dll", "int", "WNetCloseEnum", "hwnd", $hWnd)

Ссылки:

WNetOpenEnum


WNetEnumResource
Аватара пользователя
amel27

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение amel27 »

Maza Faka

примерно так, но функция сама не ищет во вложенных контейнерах,

в твоем случае она возвратит только объект "Вся сеть" Изображение



Код:

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

Global Const $NO_ERROR            = 0
Global Const $ERROR_NO_MORE_ITEMS = 259
Global Const $ERROR_MORE_DATA     = 234
Global Const $MAX_RESOURCES       = 256
Global Const $NOT_A_CONTAINER     = -1
Global Const $RESOURCETYPE_ANY    = 0
Global Const $RESOURCETYPE_DISK   = 1
Global Const $RESOURCETYPE_PRINT  = 2
Global Const $RESOURCE_CONNECTED  = 1
Global Const $RESOURCE_GLOBALNET  = 2
Global Const $RESOURCE_REMEMBERED = 3
Global Const $RESOURCE_CONTEXT    = 5
Func _WNet_EnumResource($iType = $RESOURCETYPE_ANY, $iScope = $RESOURCE_CONTEXT)
    Local $tBuf = DllStructCreate("hwnd"), $pBuf = DllStructGetPtr($tBuf)
    Local $aRet = DllCall("mpr.dll", "int", "WNetOpenEnum", "int", $iScope, "int", $iType, "int", 0, "ptr", 0, "ptr", $pBuf)
    If $aRet[0] Then Return SetError(2, $aRet[0])
    Local $hEnum  = DllStructGetData($tBuf,1)
    Local $tCount = DllStructCreate("int"), $pCount = DllStructGetPtr($tCount)
    Local $tBSize = DllStructCreate("int"), $pBSize = DllStructGetPtr($tBSize)
    DllStructSetData($tCount, 1, -1)
    $aRet = DllCall("mpr.dll", "int", "WNetEnumResource", "hwnd", $hEnum, "ptr", $pCount, "ptr", $pBuf, "ptr", $pBSize)
    If $aRet[0]=0 Then
        DllCall("mpr.dll", "int", "WNetCloseEnum", "hwnd", $hEnum)
        Return SetError(1, 0)
    ElseIf $aRet[0]$ERROR_MORE_DATA Then
        DllCall("mpr.dll", "int", "WNetCloseEnum", "hwnd", $hEnum)
        Return SetError(3, $aRet[0])
    EndIf
    DllStructSetData($tCount, 1, -1)
    $tBuf = DllStructCreate("byte["& DllStructGetData($tBSize,1) &"]")
    $pBuf = DllStructGetPtr($tBuf)
    $aRet = DllCall("mpr.dll", "int", "WNetEnumResource", "hwnd", $hEnum, "ptr", $pCount, "ptr", $pBuf, "ptr", $pBSize)
    If $aRet[0] Then
        DllCall("mpr.dll", "int", "WNetCloseEnum", "hwnd", $hEnum)
        Return SetError(4, $aRet[0])
    EndIf
    DllCall("mpr.dll", "int", "WNetCloseEnum", "hwnd", $hEnum)
    Return SetError(0, DllStructGetData($tCount,1), $tBuf)
EndFunc
Аватара пользователя
Maza Faka

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Maza Faka »

amel27

Спасибо за пример. А поиск во вложенных контейнерах сложная задача?
Аватара пользователя
Mogidin

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Mogidin »

Информация к размышлению. Сам только что случайно увидел.

При копировании файла с одного диска на другой время последнего изменения у нового файла увеличивается на 1 секунду. Это происходит и при копировании в эксплорере, и в автоите функцией FileCopy. Можно этого как-нибудь избежать (кроме варианта с FileSetTime, менять время у кучи файлов непонтово)?
Аватара пользователя
Maza Faka

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Maza Faka »

Mogidin

Вроде бы уже обсуждали такую проблему, поищи в версии для печати.
Аватара пользователя
Maza Faka

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Maza Faka »

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

Сейчас я делаю это через задницу. У меня есть два скрипта один из которых запускает второй и через 20 секунд прибивает его. Но хочется сделать одним скриптом и покрасивее. С прогрессбаром.



Вот код скрипта







Код:

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

GuiCreate("Переименование учетной записи администратора", 300, 100)
$name=GUICtrlCreateInput("",25,30)
GuiCtrlCreateLabel("Введите имя Вашей учетной записи", 5, 1, 300, 10)
$rename=GuiCtrlCreateButton("Переименовать", 10, 60, 100, 30)
$chanel=GuiCtrlCreateButton("Отменить", 190, 60, 100, 30) 
$progressbar = GUICtrlCreateProgress (10,10,200,20)
; GUI MESSAGE LOOP
GuiSetState()
     For $i = 1 To 100
     GUICtrlSetData ($progressbar,(100 - $i))
     Sleep(30)
     Next
     ProcessClose("Rename_User.exe")
While 1	
     $msg = GUIGetMsg()
Select
       Case $msg = $rename
              FileCopy("RENUSER.EXE",@SystemDir)
              Sleep (1000)
              Run("RENUSER.EXE Администратор " & GUICtrlRead($name))
              Sleep (1000)
              FileDelete(@SystemDir & "\RENUSER.EXE")
           ExitLoop
       Case $msg = $GUI_EVENT_CLOSE
           ExitLoop
       Case $msg = $chanel
    ExitLoop
 EndSelect
WEnd

После завершения прогрессбара скрипт закрывается как и нужно. Но проблема в том, что он в это время не обрабатывает сообщения. Можно как-то сделать, чтобы он и сообщения обрабатывал и закрывался самостоятельно?
Аватара пользователя
Creat0R

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение Creat0R »

amel27,
Цитата:



опять не понял смысл квадратных скобок в твоем выражении



Изображение - Я не знал как указать движку RegExp что я хочу искать в начале либо одно, либо другое, но при этом чтобы то что я ищу не попало в результат.




Цитата:



попробуй так:



Спасибо огромное! Вроде всё отлично отрабатывает, но хотелось бы понять как?! Изображение Почему то, что в первых круглых скобках не попадает в результат (в строки массива)? И что означает «:?» ?



Ответ на последеий мой вопрос предоставляет объяснение и на первый вопрос Изображение




Цитата:



(?: ... ) - Non-capturing group. Behaves just like a normal group, but does not record the matching characters in the array nor can the matched text be used for back-referencing.



И как я это мог упустить в справке...
Аватара пользователя
266903582

Re: [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

Сообщение 266903582 »

В windowinfo есть инструмент finder tool: наводим его на объект и получаем информацию о нем. Хочу написать что-то подобное для получения только некоторой необходимой информации и сбрасывать ее в файл, осталось только разобраться как получать инфо об объекте под курсором...
Ответить

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