ну ты горазд задачки задавать... три дня колдовал на DllCall
... самое забавное, что на форуме AutoIt не нашел ни одного рабочего варианта... Зато теперь можно смело замахнуться на всю линейку
Код:
;===============================================================================
; Использование: _NetLocalGroupGetMembers ($s_Group, [$s_Computer, [, $i_ShowDomain [, $i_Filter]]])
; Параметры: $s_Group - имя локальной группы;
; $s_Computer - DNS или NetBIOS имя компьютера, пустая строка или пропущенный
; параметр равнозначны локальному компьютеру;
; $i_ShowDomain - "1" включить имя домена, "0" не включать;
; $i_Filter - набор флагов, задающих фильтр отбираемых записей:
; 1 - пользователи,
; 2 - группы,
; 16 - предопределенные (WellKnown) группы,
; 32 - удаленные учетные записи,
; 128 - неизвестный тип.
; Результат: При успешном завершении возвращает 1-мерный массив учетных записей,
; 1-й элемент массива (индекс 0) содержит количество записей.
; При неудаче 1-й элемент содержит "-1" и @error указывает код ошибки
;
;===============================================================================
Func _NetLocalGroupGetMembers ($sGroup, $sServer = "", $iShowDom = 1, $iFilter = 511)
Local $res [1] = [0], $uPTR= DllStructCreate ("ptr")
If $iShowDom Then
$iShowDom=2
Else
$iShowDom=1
EndIf
Local $ret = DllCall ("netapi32.dll", "int", "NetLocalGroupGetMembers", _
"wstr", $sServer, _
"wstr", $sGroup, _
"int", $iShowDom, _
"ptr", DllStructGetPtr ($uPTR), _
"int", -1, _
"int_ptr", 0, _
"int_ptr", 0, _
"int_ptr", 0 )
If $ret[0] Then
SetError ($ret [0])
$res[0] = -1
Else
If $ret[6]>0 Then
Local $i, $string
Local $uBUF = DllStructCreate ("ptr[" & $ret[6]*3 & "]", DllStructGetData ($uPTR,1) )
For $i=3 To $ret[6]*3 Step 3
If BitAnd (BitShift (1, 1 - DllStructGetData ($uBUF, 1, $i-1) ), $iFilter) Then
$ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _
"int", 0, _
"int", 0, _
"ptr", DllStructGetData ($uBUF, 1, $i), _
"int", -1, _
"str", "", _
"int", 0, _
"int", 0, _
"int", 0 )
$string = DllStructCreate ("char[" & $ret[0] & "]")
$ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _
"int", 0, _
"int", 0, _
"ptr", DllStructGetData ($uBUF, 1, $i), _
"int", $ret[0], _
"ptr", DllStructGetPtr ($string), _
"int", $ret[0], _
"int", 0, _
"int", 0 )
ReDim $res [$res[0]+2]
$res [0] = $res [0]+1
$res [$res[0]] = DllStructGetData ($string,1)
EndIf
Next
EndIf
EndIf
DllCall ("netapi32.dll", "int" ,"NetApiBufferFree", _
"ptr" , DllStructGetData ($uPTR,1) )
Return $res
EndFunc