Lovec

Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ViSiToR Вод код примера работы этой функции: Код: Local $SectorsPerCluster Local $BytesPerSector Local $NumberOfFreeClusters Local $TotalNumberOfClusters $calldata=DllCall("Kernel32.dll","int","GetDiskFreeSpaceW", _ "wstr", "C:\", _ "dword*", $SectorsPerCluster, _ "dword*", $BytesPerSector, _ "dword*", $NumberOfFreeClusters, _ "dword*", $TotalNumberOfClusters) ; Данные возвращаются в виде массива, не изменяя значения передаваемых в функцию переменных $SectorsPerCluster = $calldata[2] $BytesPerSector = $calldata[3] $NumberOfFreeClusters = $calldata[4] $TotalNumberOfClusters = $calldata[5] MsgBox (0, "", "Всего кластеров: " & $TotalNumberOfClusters & @CR & _ "Количество свободных кластеров: " & $NumberOfFreeClusters & @CR & _ "Количество байт в одном секторе: " & $BytesPerSector & @CR & _ "Количество секторов в одном кластере: " & $SectorsPerCluster & @CR & @CR & _ "Итого: " & @CR & @CR & _ "Количество байт в одном кластере: " & $BytesPerSector * $SectorsPerCluster & @CR & _ "Всего байт на диске С: " & $BytesPerSector * $SectorsPerCluster * $TotalNumberOfClusters & @CR & _ "Свободно байт на диске С: " & $BytesPerSector * $SectorsPerCluster * $NumberOfFreeClusters) | Здесь видно что переменные используются только для вызова функции и после окончания ее работы их значения не изменяются. А возвращается масив $calldata, а не просто число >0. Вот про него то я и говрю, как я могу догадаться что в его четвертом элементе ($calldata[4]) возвращается количество свободных кластеров?! Kar1son 1) Подключиться к реестру удаленного компьютера и прочитать данные оттуда: Ключ "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName" Параметр "ComputerName" или Ключ "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" Параметр "Hostname" 2) С помощью WMI: Код: $CompName = "192.168.3.4" ; IP компьютера к которому подключаемся $UserName = "domain\Administrator" ; имя пользователя от чьего имени подключаемся $Pass = "*****" ; пароль пользователя $UserName $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Устанавливаем перехватчик COM-ошибок $objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator") $objWMIService = $objSWbemLocator.ConnectServer($CompName, "root\CIMV2", $UserName, $Pass, "", "", 0) $colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem") If IsObj($colItems) Then For $objComputer In $colItems MsgBox (0, '', $objComputer.Name) Next EndIf Func MyErrFunc() Msgbox(0,"COM error","Возникла ошибка при работе с COM объектом !" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ ) Endfunc | 3) Читать и разбирать регулярно STDOUT: Код: #include <Constants.au3> Local $foo = Run(@ComSpec & " /c nslookup 192.168.3.4", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) Local $line While 1 $line = StdoutRead($foo) If @error Then ExitLoop MsgBox(0, "STDOUT read:", $line) Wend While 1 $line = StderrRead($foo) If @error Then ExitLoop MsgBox(0, "STDERR read:", $line) Wend MsgBox(0, "Debug", "Exiting...") |
|