Ver Mensaje Individual
  #4  
Antiguo 22-06-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
force1758,

Cita:
Empezado por Wikipedia:

Windows Management Instrumentation (WMI)
is a set of extensions to the Windows Driver Model that provides an operating system interface through which instrumented components provide information and notification. WMI is Microsoft's implementation of the Web-Based Enterprise Management (WBEM) and Common Information Model (CIM) standards from the Distributed Management Task Force (DMTF).

Tomado del link : http://en.wikipedia.org/wiki/Windows...nstrumentation
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActiveX, ComObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Obtiene Información de un Proceso Activo en Memoria con WMI
function GetProcessInformation(ProcessName : String) : String;
const
   wbemFlagForwardOnly = $00000020;

var
   FSWbemLocator : OLEVariant;
   FWMIService : OLEVariant;
   FWbemObjectSet : OLEVariant;
   FWbemObject : OLEVariant;
   oEnum : IEnumvariant;
   iValue : LongWord;
   SQLWMI : String;

begin

   FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');

   FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');

   SQLWMI := 'SELECT Name, ProcessId, Caption, ExecutablePath FROM Win32_Process Where Name = ' + QuotedStr(ProcessName);

   FWbemObjectSet := FWMIService.ExecQuery(SQLWMI,'WQL',wbemFlagForwardOnly);

   oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;

   if oEnum.Next(1, FWbemObject, iValue) = 0 then
   begin
      Result := String(FWbemObject.ExecutablePath);
      FWbemObject:=Unassigned;
   end
   else
      raise Exception.Create('El Programa No Se Encuentra Activo en Memoria');

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMessage(Format('El Path del Programa en Disco es: %s',[GetProcessInformation('notepad.exe')]));
end;

end.
El código anterior es una variante de la solución mostrada en el Msg #2 utilizando la Clase Win32_Process de WMI como se sugirió en el Msg #3.

Nota: WMI es un medio muy versátil para obtener y manejar informacion en Windows, en el ejemplo de hace un Select a cuatro propiedades de la Clase Win32_Process (Aunque solo se requiere la propiedad ExecutablePath) como una muestra de las capacidades de WMI.

Te sugiero revisar estos links:
Cita:
Windows Management Instrumentation : http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

WMI Delphi Code Creator : http://theroadtodelphi.wordpress.com...-code-creator/
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 22-06-2013 a las 09:51:52.
Responder Con Cita