PDA

Ver la Versión Completa : Ayuda sobre uso de Script desde my aplicasión


Suriu
22-11-2008, 16:29:55
Hola, necesito ayuda sobre uso de visual basic script (.vbs) en mi aplicasión:

1). ?Como utilizo los ficheros .vbs desde mi aplicasión?.

2). ?Como ejecuto los ficheros .vbs y como obtengo su salida desde mi aplicasión?.

3). ?Como utilizo el codigo fuente del fuchero .vbs en mi aplicasión?.

4). ?Como tradusco el cofigo fuente de fichero .vbs a delphi?.

fuente:

On Error Resume Next

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * from Win32_OnBoardDevice")

For Each objItem in colItems
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "Device Type: " & objItem.DeviceType
Wscript.Echo "Model: " & objItem.Model
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "Tag: " & objItem.Tag
Wscript.Echo "Version: " & objItem.Version
Wscript.Echo
Next


Enlase al fuente aqui (http://www.microsoft.com/technet/scriptcenter/scripts/hardware/basic/hwbavb02.mspx?mfr=true).

gracias por su ayuda...

cHackAll
23-11-2008, 02:46:03
Hola Suriu, tienes tres opciones (aconsejo la tercera :cool:);

WinExec('cmd /ccscript script.vbs>stdout.txt', SW_HIDE);
ListBox1.Items.LoadFromFile('stdout.txt');
DeleteFile('stdout.txt'); ShowMessage(GetDosOutput('cscript script.vbs')); // Busca dicha función en el forouses ActiveX, ComObj;

procedure TForm1.Button1Click(Sender: TObject);
const DeviceType: array [1..7] of PChar = ('Other', 'Unknown', 'Video', 'SCSI Controller', 'Ethernet', 'Token Ring', 'Sound');
var
WMI, Item: OleVariant;
foreach: IEnumVariant;
enum: IUnknown;
Output: string;
begin
WMI := CreateOleObject('WbemScripting.SWbemLocator');
enum := WMI.ConnectServer.InstancesOf('Win32_OnBoardDevice')._NewEnum;
foreach := enum as IEnumVariant;
Output := '';
while foreach.Next(1, Item, PDWORD(0)^) = 0 do
begin
Output := Output + DeviceType[Integer(Item.DeviceType)] + ': ' + Item.Description + #13;
VariantClear(Item);
end;
foreach := nil;
enum := nil;

ShowMessage(Output);
end;

Saludos

seoane
23-11-2008, 03:44:55
Vaya chackall, yo lo estaba intentando de esta manera:

var
ScriptControl: OleVariant;
WmiService: OleVariant;
Items: IUnknown;
Enum: IEnumVariant;
Fetched: Cardinal;
Item: OleVariant;
begin
ScriptControl:= CreateOleObject('ScriptControl');
ScriptControl.Language := 'VBScript';
WmiService:= ScriptControl.Eval('GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")');
Items:= WMIService.ExecQuery('Select * from Win32_OnBoardDevice')._NewEnum;
Enum:= Items as IEnumVariant;
Enum.Reset;
Enum.Next(1, Item, Fetched);
while Fetched = 1 do
begin
if not VarIsNull(Item.Description) then
Memo1.Lines.Add(Item.Description);
Enum.Next(1, Item, Fetched);
end;
end;

Pero no daba con la manera de enumerar la colección devuelta por ExecQuery, gracias por el código me has ahorrado mucho tiempo.