Что нового

Вернуть значение из VBS в AutoIt скрипт

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Есть ли возможность вернуть значение из vbs скрипта в AutoIt?
 

BedCO

Новичок
Сообщения
1
Репутация
0
Посмотрите что не так я делаю. Не получается получить значение Free для дальнейшего сравнения и обработки событий. Другие способы получения данных о размере диске не рассматривал (не силен в WMI).

Скрипт на VBS:
VBS
Код:
'Проверка количества свободного места на системном разделе. VBScript 
function free()
Set fso = WScript.CreateObject("Scripting.FileSystemObject") 
Set WSHShell = WScript.CreateObject("WScript.Shell") 
Set WshProEnv = WshShell.Environment("PROCESS")
Free=0
PC = WshShell.ExpandEnvironmentStrings("%computername%")
Systema = WshProEnv("SYSTEMDRIVE")
'Узнаем свободное место и переводим его в Мб с 
' точностью до 0 знака после запятой 
free = FormatNumber(fso.GetDrive(systema).FreeSpace/1048576, 0 , 0) 
'Если места меньше 5 Гб 
end function

If free() > 5120 Then 
'то выводим сообщение об этом 
WScript.Echo free
End If

Как я переписал его на AutoIT:
Код:
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <Array.au3>
#include <File.au3>
GUICreate('Установка', 185, 90) ;создание формы
$setup=GUICtrlCreateButton("Установить сейчас", 2, 2, 180, 40)
$cancel=GUICtrlCreateButton("Выход", 2, 45, 180, 40)
GUISetState()
 While 1
			$msg = GUIGetMsg()
			 Select
			 Case $msg = $setup
				mem()
			 Case $msg = $cancel
				 ExitLoop
			  Case $GUI_EVENT_CLOSE
			 EndSelect
 Wend

Func Mem()
    Local $Code = ""
    $Code &= 'Function free()'& @LF
    $Code &= 'Set fso = WScript.CreateObject("Scripting.FileSystemObject") ' & @LF
    $Code &= 'Set WSHShell = WScript.CreateObject("WScript.Shell") ' & @LF
    $Code &= 'Set WshProEnv = WshShell.Environment("PROCESS")' & @LF
    $Code &= 'Free=0' & @LF
    $Code &= 'PC = WshShell.ExpandEnvironmentStrings("%computername%")' & @LF
    $Code &= 'Systema = WshProEnv("SYSTEMDRIVE")' & @LF
    $Code &= 'free = FormatNumber(fso.GetDrive(systema).FreeSpace/1048576, 0 , 0)' & @LF
    $Code &= 'End Functiom'& @LF
    Local $VbsObj = ObjCreate("ScriptControl")
    If @error Then Return SetError(1, 0, -1)
    $VbsObj.Language = "vbscript"
    $VbsObj.AddCode($Code)
    $Res = $VbsObj.run("free")
       ;~ 	Код VBS скрипта для наглядности
     MsgBox(1,"",$code)
       ;~ 	В этом окне хочу получить значение FREE
     MsgBox(1,"",$res)
Return $Res
EndFunc
EndFunc

За альтернативные решения sngr и madmasles <img src="http://autoit-script.ru/Themes/default/images/kdm_up.png" alt="" class="bbc_img">, но по теме вопрос не раскрыт. Есть <a href="http://autoit-script.ru/index.php?topic=5515.msg39495#msg39495">пример</a> достаточно сложный для меня. Хотелось бы проще. Пусть даже на примере "Hello World".
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$fso = ObjCreate("Scripting.FileSystemObject")
$WSHShell = ObjCreate("WScript.Shell")
$WshProEnv = $WshShell.Environment("PROCESS")
$Free=0
$PC = $WshShell.ExpandEnvironmentStrings("%computername%")
$Systema = $WshProEnv("SYSTEMDRIVE")
$Free = $fso.GetDrive($systema).FreeSpace/1048576
MsgBox(32,'',$Free)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
BedCO,
ИМХО, так проще.
Код:
MsgBox(64, 'Info', StringFormat('%d Mb', DriveSpaceFree(StringLeft(@WindowsDir, 2))))
 
Верх