http://laurent-dardenne.developpez.com/articles/wmi-p1/
دروس في WMI باللغه الفرنسية في انتضار مشاركه الاخوة من مبرمجين نضام الوندوز
لتعريف wMI بالعربية
اما الان يمكنك الدخزل الى الكود التالي لتسبح قبيلا الكود من صديقي المحترم و المخضرم و الذي لا يفهم شئ مما اقوله جوني ماعدى النضر الاى الصور وذلك بمساعدة الدرس السابق
[color= #009900;]{[color= #339933;]********************************************************************************
*
Cette unité a été développée sur la base du tutorial de
Laurent Dardenne [color= #009900;]([color= #009900;][url[color= #339933;]=[color= #0000ff;]"http://laurent-dardenne.developpez.com/articles/wmi-p1/"[color= #009900;]]http[color= #339933;]:[color= #666666; font-style: italic;]//laurent
-dardenne.developpez.com/articles/wmi-p1/[/url])
et du MSDN [color= #009900;]([color= #009900;][url[color= #339933;]=[color= #0000ff;]"http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/w
mi_reference.asp"[color= #009900;]]http[color= #339933;]:[color= #666666; font-style: italic;]//msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/w
mi_reference.asp[/url])
Version [color= #cc66cc;]0.1 [color= #009900;](Janvier [color= #cc66cc;]2006[color= #009900;])
Auteur[color= #339933;]: fjohnny [color= #009900;](FONTAINE Johnny[color= #009900;])
Email[color= #339933;]: [color= #009900;][email[color= #339933;]=[color= #0000ff;]"johnny@linux-fan.com"[color= #009900;]]johnny[color= #339933;]@linux[color= #339933;]-fan[color= #339933;].com[color= #009900;][[color= #339933;]/email[color= #009900;]]
[color= #339933;]********************************************************************************
*[color= #009900;]}
unit WMI[color= #339933;];
[color= #000000; font-weight: bold;]interface
Uses SysUtils[color= #339933;],Windows[color= #339933;],Dialogs[color= #339933;],Classes[color= #339933;],ActiveX[color= #339933;],Variants[color= #339933;],
WbemScripting_TLB[color= #339933;],[color= #009900;]{Unité créer via l[color= #0000ff;]'ActiveX importé de %systemroot%[color= #000099; font-weight: bold;]system[color= #000099; font-weight: bold;]wbem[color= #000099; font-weight: bold;]wbemtbl.tbl}
[color= #0000ff;]LogEvenements;{Unité permettant de logger des évenements et de debugger}
[color= #0000ff;]Const
[color= #0000ff;]WMI_LOGOFF =0;
[color= #0000ff;]WMI_SHUTDOWN =1;
[color= #0000ff;]WMI_REBOOT =2;
[color= #0000ff;]WMI_POWEROFF =8;
[color= #0000ff;]WMI_FORCED =4;
[color= #0000ff;]WMI_SERVICE_STOP =0;
[color= #0000ff;]WMI_SERVICE_START =1;
[color= #0000ff;]WMI_SERVICE_PAUSE = 2;
[color= #0000ff;]function CreateRemoteProcess(NomPC,Processus : String):Hwnd;
[color= #0000ff;]Function SWBempropertyToStr(Variable:SWbemProperty): String;
[color= #0000ff;]Function WMIExecuteWQL (NomPCDistant,EspaceNom,RequeteWQL : String): TStringList;Overload;
[color= #0000ff;]Function WMIExecuteWQL (NomPCDistant,RequeteWQL : String): TStringList;Overload;
[color= #0000ff;]Function WMIServiceControl (NomPC,NomService: String;Operation:integer):Boolean;
[color= #0000ff;]Function WMIArretPC (NomPC: String;TypeArret: Integer):Boolean;
[color= #0000ff;]Function WMIArretProcess(NomPC:String;PID:Integer):Boolean;
[color= #0000ff;]Function EnnumereClasseWMI (EspaceNom:String):TStringList;
[color= #0000ff;]implementation
[color= #0000ff;]Function EnnumereClasseWMI (EspaceNom:String):TStringList;
[color= #0000ff;]var
[color= #0000ff;]WmiService: SWbemServices;
[color= #0000ff;]WmiLocator: TSWbemLocator;
[color= #0000ff;]WmiObject: SWbemObject;
[color= #0000ff;]wmiObjectSet: SWbemObjectSet;
[color= #0000ff;]WmiObjectPath: SWbemObjectPath;
[color= #0000ff;]ObjectEnumerator: IEnumVariant;
[color= #0000ff;]ArrayVariant: OleVariant;
[color= #0000ff;]NumberItem: LongWord;
[color= #0000ff;]begin
[color= #0000ff;]Try
[color= #0000ff;]try
[color= #0000ff;]Result := TStringList.Create;Result.Sorted:=True;
[color= #0000ff;]WMILocator:= TSWbemLocator.Create(nil);
[color= #0000ff;]WmiService:= WMILocator.ConnectServer('[color= #339933;].[color= #0000ff;]', EspaceNom, '[color= #0000ff;]', '[color= #0000ff;]', '[color= #0000ff;]','[color= #0000ff;]', wbemConnectFlagUseMaxWait,
nil);
[color= #0000ff;]WmiObjectSet:= WmiService.SubclassesOf('[color= #0000ff;]',wbemFlagReturnWhenComplete,Nil);
[color= #0000ff;]//+wbemQueryFlagShallow limite au sous Classe immédiate
[color= #0000ff;]ObjectEnumerator:= (WmiObjectSet._NewEnum) as IEnumVariant;
[color= #0000ff;]while (ObjectEnumerator.Next(1, ArrayVariant, NumberItem) = S_OK) do
[color= #0000ff;]begin
[color= #0000ff;]WmiObject := IUnknown(ArrayVariant) as SWBemObject;
[color= #0000ff;]WmiObjectPath:= WmiObject.Path_;
[color= #0000ff;]Result.Add(WmiObjectPath.RelPath);
[color= #0000ff;]end;
[color= #0000ff;]Except
[color= #0000ff;]LogEvenement('[color= #339933;]!!!Erreur lors de l[color= #0000ff;]''énumération des Classes WMI[color= #339933;].[color= #0000ff;]');
[color= #0000ff;]end;
[color= #0000ff;]Finally
[color= #0000ff;]WmiLocator.Disconnect;WmiLocator.Free;
[color= #0000ff;]end;
[color= #0000ff;]end;
[color= #0000ff;]Function WMIArretProcess(NomPC:String;PID:Integer):Boolean;
[color= #0000ff;]var
[color= #0000ff;]WmiService: SWbemServices;
[color= #0000ff;]WMILocator: TSWbemLocator;
[color= #0000ff;]ObjectWmi, ParametreOUT : SWbemObject;
[color= #0000ff;]Instance_inParameters: SWbemObject;
[color= #0000ff;]ProcessMethod: ISWbemMethod;
[color= #0000ff;]WmiProperty: SWbemProperty;
[color= #0000ff;]PropertyReturnValue,
[color= #0000ff;]PropertyReason: OleVariant;
[color= #0000ff;]begin
[color= #0000ff;]Try
[color= #0000ff;]Try
[color= #0000ff;]Result:=False;
[color= #0000ff;]WMILocator:= TSWbemLocator.Create(nil);
[color= #0000ff;]WmiService:= WMILocator.ConnectServer(NomPC, 'ROOTCIMV2[color= #0000ff;]', '[color= #0000ff;]', '[color= #0000ff;]', '[color= #0000ff;]','[color= #0000ff;]', wbemConnectFlagUseMax
Wait, nil);
[color= #0000ff;]ObjectWmi:= WmiService.Get('Win32_Process[color= #339933;].Handle[color= #339933;]=[color= #0000ff;]"' + inttostr(PID)+ '"[color= #0000ff;]', 0, nil);
[color= #0000ff;]ProcessMethod:= ObjectWmi.Methods_.Item('Terminate[color= #0000ff;]', 0);
[color= #0000ff;]Instance_inParameters:= ProcessMethod.InParameters.SpawnInstance_(0);
[color= #0000ff;]WmiProperty:= Instance_inParameters.Properties_.Item('Reason[color= #0000ff;]',0);
[color= #0000ff;]PropertyReason:= 0;
[color= #0000ff;]WmiProperty.Set_Value(PropertyReason);
[color= #0000ff;]ParametreOUT:= ObjectWmi.ExecMethod_('Terminate[color= #0000ff;]', Instance_inParameters, wbemFlagReturnWhenComp
lete, nil);
[color= #0000ff;]PropertyReturnValue:= ParametreOUT.Properties_.Item('ReturnValue[color= #0000ff;]', 0);
[color= #0000ff;]If PropertyReturnValue.value =0 then Result:= True else Result:= False;
[color= #0000ff;]Except
[color= #0000ff;]LogEvenement('[color= #339933;]!!!Erreur lors de l[color= #0000ff;]''arrêt du processus[color= #339933;].[color= #0000ff;]');
[color= #0000ff;]end;
[color= #0000ff;]Finally
[color= #0000ff;]WMILocator.Disconnect;WMILocator.Free;
[color= #0000ff;]end;
[color= #0000ff;]end;
[color= #0000ff;]Function WMIArretPC (NomPC: String;TypeArret: Integer):Boolean;
[color= #0000ff;]var
[color= #0000ff;]WmiService: SWbemServices;
[color= #0000ff;]WmiObjet: SWbemObject;
[color= #0000ff;]wmiObjetSet: SWbemObjectSet;
[color= #0000ff;]WmiProperty: SWbemProperty;
[color= #0000ff;]ObjectEnumerator: IEnumVariant;
[color= #0000ff;]ArrayVariant: OleVariant;
[color= #0000ff;]NumberItem: LongWord;
[color= #0000ff;]ShutdownMethod_inParameters,
[color= #0000ff;]Shutdown : SWbemObject;
[color= #0000ff;]PropertyReboot : OleVariant;
[color= #0000ff;]ShutdownMethod: SWbemMethod;
[color= #0000ff;]WMILocator: TSWbemLocator;
[color= #0000ff;]begin
[color= #0000ff;]Try
[color= #0000ff;]Try
[color= #0000ff;]WMILocator:= TSWbemLocator.Create(nil);
[color= #0000ff;]WMILocator.Security_.Set_ImpersonationLevel(wbemImpersonationLevelImpersonate );
[color= #0000ff;]WMILocator.Security_.Set_AuthenticationLevel(wbemAuthenticationLevelDefault);
[color= #0000ff;]WmiService:= WMILocator.ConnectServer(NomPC, 'ROOTCIMV2[color= #0000ff;]', '[color= #0000ff;]', '[color= #0000ff;]', '[color= #0000ff;]','[color= #0000ff;]', wbemConnectFlagUseMax
Wait, nil);
[color= #0000ff;]wmiService.Security_.Privileges.Add(wbemPrivilegeRemoteShutdown, True);
[color= #0000ff;]wmiObjetSet := wmiService.ExecQuery('SELECT [color= #339933;]* FROM Win32_OperatingSystem WHERE Primary[color= #339933;]=[color= #000000; font-weight: bold;]True[color= #0000ff;]','W
QL[color= #0000ff;]', wbemFlagReturnImmediately, nil);
[color= #0000ff;]ObjectEnumerator:= (WmiObjetSet._NewEnum) as IEnumVariant;
[color= #0000ff;]while (ObjectEnumerator.Next(1, ArrayVariant, NumberItem) = S_OK) do
[color= #0000ff;]begin
[color= #0000ff;]WmiObjet := IUnknown(ArrayVariant) as SWBemObject;
[color= #0000ff;]ShutdownMethod:= wmiObjet.Methods_.Item('Win32Shutdown[color= #0000ff;]', 0);
[color= #0000ff;]ShutdownMethod_inParameters:= ShutdownMethod.InParameters;
[color= #0000ff;]Shutdown:= ShutdownMethod_inParameters.SpawnInstance_(0);
[color= #0000ff;]WmiProperty := Shutdown.Properties_.Add('Flags[color= #0000ff;]', wbemCimtypeSint32, False, 0);
[color= #0000ff;]PropertyReboot:= TypeArret ;
[color= #0000ff;]wmiProperty.Set_Value(PropertyReboot);
[color= #0000ff;]Try
[color= #0000ff;]wmiObjet.ExecMethod_('Win32Shutdown[color= #0000ff;]', Shutdown, 0, nil);
[color= #0000ff;]Result:= True;
[color= #0000ff;]except
[color= #0000ff;]Result:= False;
[color= #0000ff;]exit;
[color= #0000ff;]end;
[color= #0000ff;]End;
[color= #0000ff;]except
[color= #0000ff;]Result:=False;
[color= #0000ff;]end;
[color= #0000ff;]Finally
[color= #0000ff;]WMILocator.Disconnect; WMILocator.Free;
[color= #0000ff;]end;
[color= #0000ff;]End;
[color= #0000ff;]Function CreateRemoteProcess(NomPC,Processus : String): Hwnd;
[color= #0000ff;]var
[color= #0000ff;]WmiService: SWbemServices;
[color= #0000ff;]ProcessID: OleVariant;
[color= #0000ff;]WMILocator: TSWbemLocator;
[color= #0000ff;]Process,
[color= #0000ff;]NewProcess,
[color= #0000ff;]Instance_inParameters:SWbemObject;
[color= #0000ff;]WmiProperty: SWbemProperty;
[color= #0000ff;]ProcessMethod: ISWbemMethod;
[color= #0000ff;]PropertyCommandLine,
[color= #0000ff;]PropertyReturnValue: OleVariant;
[color= #0000ff;]begin
[color= #0000ff;]WMILocator:= TSWbemLocator.Create(nil);
[color= #0000ff;]Try
[color= #0000ff;]try
[color= #0000ff;]Result:=0;
[color= #0000ff;]WmiService:= WMILocator.ConnectServer(NomPC, 'ROOTCIMV2[color= #0000ff;]', '[color= #0000ff;]', '[color= #0000ff;]', '[color= #0000ff;]','[color= #0000ff;]', wbemConnectFlagUseMax
Wait, nil);
[color= #0000ff;]Process:=WmiService.Get('Win32_Process[color= #0000ff;]',0,Nil);
[color= #0000ff;]ProcessMethod:=Process.Methods_.Item('Create[color= #0000ff;]', 0);
[color= #0000ff;]Instance_inParameters:= ProcessMethod.InParameters.SpawnInstance_(0);
[color= #0000ff;]WmiProperty:= Instance_inParameters.Properties_.Item('CommandLine[color= #0000ff;]',0);
[color= #0000ff;]PropertyCommandLine:= Processus;
[color= #0000ff;]WmiProperty.Set_Value(PropertyCommandLine);
[color= #0000ff;]NewProcess:= Process.ExecMethod_('Create[color= #0000ff;]', Instance_inParameters, wbemFlagReturnWhenComplete, n
il);
[color= #0000ff;]PropertyReturnValue:= NewProcess.Properties_.Item('ReturnValue[color= #0000ff;]', 0);
[color= #0000ff;]if PropertyReturnValue.Value = 0 then
[color= #0000ff;]begin
[color= #0000ff;]PropertyReturnValue:= NewProcess.Properties_.Item('ProcessId[color= #0000ff;]', 0);
[color= #0000ff;]ProcessID:=PropertyReturnValue.Value;
[color= #0000ff;]Result:=ProcessID;
[color= #0000ff;]end
[color= #0000ff;]else LogEvenement('[color= #339933;]!!!Erreur [color= #0000ff;]'+inttostr(PropertyReturnValue.Value)+' lors de la création du pro
cess[color= #339933;].[color= #0000ff;]');
[color= #0000ff;]Except
[color= #0000ff;]LogEvenement('[color= #339933;]!!!Exception déclenchée lors de la création du process[color= #339933;].[color= #0000ff;]');
[color= #0000ff;]end;
[color= #0000ff;]Finally
[color= #0000ff;]WMILocator.Disconnect; WMILocator.Free;
[color= #0000ff;]end;
[color= #0000ff;]end;
[color= #0000ff;]Function SWBempropertyToStr(Variable:SWbemProperty): String;
[color= #0000ff;]Var Count: Integer;
[color= #0000ff;]WmiObjet : SWbemObject;
[color= #0000ff;]WmiService: SWbemServices;
[color= #0000ff;]WmiProperty: SWbemProperty;
[color= #0000ff;]begin
[color= #0000ff;]try
[color= #0000ff;]if VarIsNull (Variable.Get_Value) then Result:=' [color= #339933;]< [color= #000000; font-weight: bold;]Null [color= #339933;]> [color= #0000ff;]' else
[color= #0000ff;]begin
[color= #0000ff;]Try
[color= #0000ff;]case Variable.CIMType of
[color= #0000ff;]wbemCimtypeSint8,
[color= #0000ff;]wbemCimtypeUint8,
[color= #0000ff;]wbemCimtypeSint16,
[color= #0000ff;]wbemCimtypeUint16,
[color= #0000ff;]wbemCimtypeSint32,
[color= #0000ff;]wbemCimtypeUint32,
[color= #0000ff;]wbemCimtypeSint64:
[color= #0000ff;]if VarIsArray(Variable.Get_Value) then
[color= #0000ff;]begin
[color= #0000ff;]if VarArrayHighBound(Variable.Get_Value, 1) > 0 then
[color= #0000ff;]for Count := 1 to VarArrayHighBound(Variable.Get_Value, 1) do Result := Result + ' [color= #0000ff;]' + IntToStr
(Variable.Get_Value[Count]);
[color= #0000ff;]end
[color= #0000ff;]else Result := IntToStr(Variable.Get_Value);
[color= #0000ff;]wbemCimtypeReal32,
[color= #0000ff;]wbemCimtypeReal64: Result := FloatToStr(Variable.Get_Value);
[color= #0000ff;]wbemCimtypeBoolean: if Variable.Get_Value then Result := '[color= #000000; font-weight: bold;]True[color= #0000ff;]' else Result := '[color= #000000; font-weight: bold;]False[color= #0000ff;]';
[color= #0000ff;]wbemCimtypeString,
[color= #0000ff;]wbemCimtypeUint64:
[color= #0000ff;]if VarIsArray(Variable.Get_Value) then
[color= #0000ff;]begin
[color= #0000ff;]if VarArrayHighBound(Variable.Get_Value, 1) > 0 then
[color= #0000ff;]for Count := 1 to VarArrayHighBound(Variable.Get_Value, 1) do Result := Result + ' [color= #0000ff;]' + Variable
.Get_Value[Count];
[color= #0000ff;]end
[color= #0000ff;]else Result := Variable.Get_Value;
[color= #0000ff;]wbemCimtypeDatetime: Result := Variable.Get_Value;
[color= #0000ff;]wbemCimtypeReference:
[color= #0000ff;]begin
[color= #0000ff;]WmiObjet:=WmiService.Get(Result,wbemFlagReturnWhenComplete,Nil);
[color= #0000ff;]Result:=AdjustLineBreaks(WmiObjet.GetObjectText_(0))
[color= #0000ff;]end;
[color= #0000ff;]wbemCimtypeObject:
[color= #0000ff;]begin
[color= #0000ff;]WmiObjet:=IUnknown(WmiProperty.Get_Value) as SWbemObject ;
[color= #0000ff;]Result:=WmiObjet.Path_.Relpath;
[color= #0000ff;]end
[color= #0000ff;]end;{End du Case}
[color= #0000ff;]Result:=Result;
[color= #0000ff;]except
[color= #0000ff;]Result:=' [color= #339933;]= Type de donnée inconnu[color= #0000ff;]';
[color= #0000ff;]end;
[color= #0000ff;]End {End du if VarIsNull...}
[color= #0000ff;]Finally
[color= #0000ff;]end;
[color= #0000ff;]end;
[color= #0000ff;]Function WMIExecuteWQL (NomPCDistant,EspaceNom,RequeteWQL : String): TStringList;Overload;
[color= #0000ff;]var
[color= #0000ff;]WMILocator: TSWbemLocator;
[color= #0000ff;]WmiService: SWbemServices;
[color= #0000ff;]WmiObject: SWbemObject;
[color= #0000ff;]wmiObjectSet: SWbemObjectSet;
[color= #0000ff;]WmiProperty: SWbemProperty;
[color= #0000ff;]WmiPropertySet: SWbemPropertySet;
[color= #0000ff;]PropertyEnumerator,
[color= #0000ff;]ObjectEnumerator: IEnumVariant;
[color= #0000ff;]ArrayVariant: OleVariant;
[color= #0000ff;]NumberItem: LongWord;
[color= #0000ff;]begin
[color= #0000ff;]Try
[color= #0000ff;]try
[color= #0000ff;]WMILocator:= TSWbemLocator.Create(nil);Result := TStringList.Create;
[color= #0000ff;]WmiService:= WMILocator.ConnectServer(NomPCDistant, EspaceNom,'[color= #0000ff;]','[color= #0000ff;]','[color= #0000ff;]','[color= #0000ff;]', wbemConnectFlagUseMa
xWait, nil);
[color= #0000ff;]WmiObjectSet := wmiService.ExecQuery(RequeteWQL,'WQL[color= #0000ff;]',wbemFlagReturnImmediately, nil);
[color= #0000ff;]ObjectEnumerator:= (WmiObjectSet._NewEnum) as IEnumVariant;
[color= #0000ff;]while (ObjectEnumerator.Next(1, ArrayVariant, NumberItem) = S_OK) do
[color= #0000ff;]begin
[color= #0000ff;]WmiObject := IUnknown(ArrayVariant) as SWBemObject;
[color= #0000ff;]WmiPropertySet:= WmiObject.Properties_;
[color= #0000ff;]PropertyEnumerator:= (WmiPropertySet._NewEnum) as IEnumVariant;
[color= #0000ff;]while (PropertyEnumerator.Next(1, ArrayVariant, NumberItem) = S_OK) do
[color= #0000ff;]begin
[color= #0000ff;]WmiProperty := IUnknown(ArrayVariant) as SWBemProperty;
[color= #0000ff;]Result.Add(WmiProperty.Name+' [color= #339933;]= [color= #0000ff;]'+SWbempropertytostr(WmiProperty));
[color= #0000ff;]end;
[color= #0000ff;]End;
[color= #0000ff;]except
[color= #0000ff;]LogEvenement('[color= #339933;]!!!Echec de l[color= #0000ff;]''exécution de la requête WMI[color= #339933;].[color= #0000ff;]');
[color= #0000ff;]end;
[color= #0000ff;]Finally
[color= #0000ff;]WMILocator.Disconnect; WMILocator.Free;
[color= #0000ff;]end;
[color= #0000ff;]end;
[color= #0000ff;]Function WMIExecuteWQL (NomPCDistant,RequeteWQL : String): TStringList;Overload;
[color= #0000ff;]var
[color= #0000ff;]WMILocator: TSWbemLocator;
[color= #0000ff;]WmiService: SWbemServices;
[color= #0000ff;]WmiObject: SWbemObject;
[color= #0000ff;]wmiObjectSet: SWbemObjectSet;
[color= #0000ff;]WmiProperty: SWbemProperty;
[color= #0000ff;]WmiPropertySet: SWbemPropertySet;
[color= #0000ff;]PropertyEnumerator,
[color= #0000ff;]ObjectEnumerator: IEnumVariant;
[color= #0000ff;]ArrayVariant: OleVariant;
[color= #0000ff;]NumberItem: LongWord;
[color= #0000ff;]begin
[color= #0000ff;]Try
[color= #0000ff;]try
[color= #0000ff;]WMILocator:= TSWbemLocator.Create(nil);Result := TStringList.Create;
[color= #0000ff;]WmiService:= WMILocator.ConnectServer(NomPCDistant, 'ROOTCIMV2[color= #0000ff;]','[color= #0000ff;]','[color= #0000ff;]','[color= #0000ff;]','[color= #0000ff;]', wbemConnectFlagUs
eMaxWait, nil);
[color= #0000ff;]WmiObjectSet := wmiService.ExecQuery(RequeteWQL,'WQL[color= #0000ff;]',wbemFlagReturnImmediately, nil);
[color= #0000ff;]ObjectEnumerator:= (WmiObjectSet._NewEnum) as IEnumVariant;
[color= #0000ff;]while (ObjectEnumerator.Next(1, ArrayVariant, NumberItem) = S_OK) do
[color= #0000ff;]begin
[color= #0000ff;]WmiObject := IUnknown(ArrayVariant) as SWBemObject;
[color= #0000ff;]WmiPropertySet:= WmiObject.Properties_;
[color= #0000ff;]PropertyEnumerator:= (WmiPropertySet._NewEnum) as IEnumVariant;
[color= #0000ff;]while (PropertyEnumerator.Next(1, ArrayVariant, NumberItem) = S_OK) do
[color= #0000ff;]begin
[color= #0000ff;]WmiProperty := IUnknown(ArrayVariant) as SWBemProperty;
[color= #0000ff;]Result.Add(WmiProperty.Name+' [color= #339933;]= [color= #0000ff;]'+ SWbempropertytostr(WmiProperty));
[color= #0000ff;]end;
[color= #0000ff;]End;
[color= #0000ff;]except
[color= #0000ff;]LogEvenement('[color= #339933;]!!!Echec de l[color= #0000ff;]''exécution de la requête WMI[color= #339933;].[color= #0000ff;]');
[color= #0000ff;]end;
[color= #0000ff;]Finally
[color= #0000ff;]WMILocator.Disconnect; WMILocator.Free;
[color= #0000ff;]end;
[color= #0000ff;]end;
[color= #0000ff;]Function WMIServiceControl (NomPC,NomService: String;Operation:integer):Boolean;
[color= #0000ff;]begin
[color= #0000ff;]Try
[color= #0000ff;]Result:= false;
[color= #0000ff;]Case Operation of
[color= #0000ff;]WMI_SERVICE_STOP :if CreateRemoteProcess(NomPC,'cmd [color= #339933;]/c net stop [color= #0000ff;]"'+NomService)<>0 then Result:=
True;
[color= #0000ff;]WMI_SERVICE_START:if CreateRemoteProcess(NomPC,'cmd /c net start "[color= #0000ff;]'+NomService)<>0 then Result:
=True;
[color= #0000ff;]WMI_SERVICE_PAUSE:if CreateRemoteProcess(NomPC,'cmd [color= #339933;]/c net pause [color= #0000ff;]"'+NomService)<>0 then Result:
=True;
[color= #0000ff;]end;
[color= #0000ff;]except
[color= #0000ff;]LogEvenement('!!!Echec du contrôle du service via WMI. La commande était : '+ IntToStr (Operati
on));
[color= #0000ff;]end;
[color= #0000ff;]End;
[color= #0000ff;]end.في المرفقات مثال واضح
تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 21 أغسطس 2008 في 16:04

محاولت لواجهة البرنامج بالدلفي نت مع السبلاش