Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=26)
-   -   Ayuda sobre uso de Script desde my aplicasión (https://www.clubdelphi.com/foros/showthread.php?t=61803)

Suriu 22-11-2008 16:29:55

Ayuda sobre uso de Script desde my aplicasión
 
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:

Código Delphi [-]
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.

gracias por su ayuda...

cHackAll 23-11-2008 02:46:03

Hola Suriu, tienes tres opciones (aconsejo la tercera :cool:);

Código Delphi [-]
 WinExec('cmd /ccscript script.vbs>stdout.txt', SW_HIDE);
 ListBox1.Items.LoadFromFile('stdout.txt');
 DeleteFile('stdout.txt');
Código Delphi [-]
 ShowMessage(GetDosOutput('cscript script.vbs')); // Busca dicha función en el foro
Código Delphi [-]
uses 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:
Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 03:18:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi