الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشروع مافكسبي2003

مغلق
بدأه زكيري عبد العالي في 18 أغسطس 2008 · 42 رد · 7,002 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#26

http://laurent-dardenne.developpez.com/articles/wmi-p1/

دروس في WMI باللغه الفرنسية في انتضار مشاركه الاخوة من مبرمجين نضام الوندوز

لتعريف wMI بالعربية

اما الان يمكنك الدخزل الى الكود التالي لتسبح قبيلا الكود من صديقي المحترم و المخضرم و الذي لا يفهم شئ مما اقوله جوني ماعدى النضر الاى الصور وذلك بمساعدة الدرس السابق

f johnny

 

[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.

في المرفقات مثال واضح

WMI_Requete.rar

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 21 أغسطس 2008 في 16:04

#27

شكرا اخي mohfa علي التغيير

اخي زكيري عبد العالي

اقتباس
كل شئ الى حد الان جيد جدا ما عدى

اقتباس
هذا الاجراء يهمل عل انها ء البروسس الموجود في الجهاز و نحن نريد ارسال تعليمه الى الجهاز المحدد بواسطة العنوان IP او اسم الجهاز Computer Name

لان الغاء التثبيت يتم عن بعد و الا بد من استخدام WMI اي تعليمات WQL

لاحظ الموضوع الاخر هناك مثال في المرقثات والمطلوب وظيفتين موجودتين في WMI.pas

جاري العمل علي WMI

BLooDY - StOrM

4c9osp1.jpg

أشهد ان لا اله الا الله واشهد ان محمد رسول الله

#28

BLOODYSTORM بارك الله فيك على الحماس و الاخ mohfa

لكن اعتقد ان المشروع لم يعجب الاخوة مع اني احاول ان اديره بشكل جيد كي يتسنى لكل مبتدأ فهم المطلوب و فهم الانجاز .

مع ان الواجهة سهلة جدا والكل يستطيع فعل ذلك وكما قلت والله لست بحاجة الا لافيد الجميع وهو الهدف الاساسي لذلك فتحت نفس الموضوع في منتدي c# وقريبا في منتدي الدلفي نت كي يستطيع الجميع مقارنه الدلفي و الدلفي نت من خلاله و كما طلب مني اخوتي على.ع و علاء ..و غيره فعل ذلك .

وكما قلت هذه الايام عندي الوقت الكافي واكيد في بداية الشهر المقبل سيكون صعب عليا المشاركة .

شكرا

#29

ان كنت لا تملك شبكة يمكنك انشاء واحدة عبر الانترنت بستعمال

https://secure.logmein.com/products/hamachi/vpn.asp?lang=fr

لتطبيق عليه تجاربك WMI اظنها تصلح لاني لم اجرب بعد اي ان الربط يصير شبه شبكة عبر النت

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 21 أغسطس 2008 في 21:51

#30

هذه الوظيفة تنهي اي برنامج في اي جهاز مربوط بالشبكه WMIArretProcess عن طريق رقم PID الخاص بالبرسس لم يبقى الا كيفيه استرجاع PID من لاءحه البرسس و الخاصة كما قلت سايقا بالوارد و الاكسل ..

[color= #000000; font-weight: bold;]Function WMIArretProcess[color= #009900;](NomPC[color= #339933;]:String[color= #339933;];PID[color= #339933;]:Integer[color= #009900;])[color= #339933;]:Boolean[color= #339933;];

[color= #000000; font-weight: bold;]var

  WmiService[color= #339933;]:                 SWbemServices[color= #339933;];

  WMILocator[color= #339933;]:                 TSWbemLocator[color= #339933;];

  ObjectWmi[color= #339933;], ParametreOUT [color= #339933;]:   SWbemObject[color= #339933;];

  Instance_inParameters[color= #339933;]:      SWbemObject[color= #339933;];

  ProcessMethod[color= #339933;]:              ISWbemMethod[color= #339933;];

  WmiProperty[color= #339933;]:                SWbemProperty[color= #339933;];

  PropertyReturnValue[color= #339933;],

  PropertyReason[color= #339933;]:             OleVariant[color= #339933;];

begin

Try

  Try

    Result[color= #339933;]:=[color= #000000; font-weight: bold;]False[color= #339933;];

    WMILocator[color= #339933;]:= TSWbemLocator[color= #339933;].Create[color= #009900;](nil[color= #009900;])[color= #339933;];

    WmiService[color= #339933;]:= WMILocator[color= #339933;].ConnectServer[color= #009900;](NomPC[color= #339933;], [color= #0000ff;]'ROOT[color= #000099; font-weight: bold;]CIMV2'[color= #339933;], [color= #0000ff;]''[color= #339933;], [color= #0000ff;]''[color= #339933;], [color= #0000ff;]''[color= #339933;],[color= #0000ff;]''[color= #339933;], wbemConnectFlagUs
eMaxWait[color= #339933;], nil[color= #009900;])[color= #339933;];

    ObjectWmi[color= #339933;]:= WmiService[color= #339933;].Get[color= #009900;]([color= #0000ff;]'Win32_Process.Handle="' [color= #339933;]+ inttostr[color= #009900;](PID[color= #009900;])[color= #339933;]+ [color= #0000ff;]'"'[color= #339933;], [color= #cc66cc;]0[color= #339933;], nil[color= #009900;])[color= #339933;];

    ProcessMethod[color= #339933;]:= ObjectWmi[color= #339933;].Methods_[color= #339933;].Item[color= #009900;]([color= #0000ff;]'Terminate'[color= #339933;], [color= #cc66cc;]0[color= #009900;])[color= #339933;];

    Instance_inParameters[color= #339933;]:= ProcessMethod[color= #339933;].InParameters[color= #339933;].SpawnInstance_[color= #009900;]([color= #cc66cc;]0[color= #009900;])[color= #339933;];

    WmiProperty[color= #339933;]:= Instance_inParameters[color= #339933;].Properties_[color= #339933;].Item[color= #009900;]([color= #0000ff;]'Reason'[color= #339933;],[color= #cc66cc;]0[color= #009900;])[color= #339933;];

    PropertyReason[color= #339933;]:= [color= #cc66cc;]0[color= #339933;];

    WmiProperty[color= #339933;].Set_Value[color= #009900;](PropertyReason[color= #009900;])[color= #339933;];

    ParametreOUT[color= #339933;]:= ObjectWmi[color= #339933;].ExecMethod_[color= #009900;]([color= #0000ff;]'Terminate'[color= #339933;], Instance_inParameters[color= #339933;], wbemFlagReturnWhen
Complete[color= #339933;], nil[color= #009900;])[color= #339933;];

    PropertyReturnValue[color= #339933;]:= ParametreOUT[color= #339933;].Properties_[color= #339933;].Item[color= #009900;]([color= #0000ff;]'ReturnValue'[color= #339933;], [color= #cc66cc;]0[color= #009900;])[color= #339933;];

    [color= #b1b100;]If PropertyReturnValue[color= #339933;].value [color= #339933;]=[color= #cc66cc;]0 then Result[color= #339933;]:= [color= #000000; font-weight: bold;]True [color= #b1b100;]else Result[color= #339933;]:= [color= #000000; font-weight: bold;]False[color= #339933;];

  Except

    [color= #666666; font-style: italic;]//LogEvenement('');

  [color= #990000;]end[color= #339933;];

Finally

  WMILocator[color= #339933;].Disconnect[color= #339933;];WMILocator[color= #339933;].Free[color= #339933;];

[color= #990000;]end[color= #339933;];

[color= #990000;]end[color= #339933;];
#31
اقتباس
الهدف من المشروع :

الدور الأساسي هو تحديث اصدرا الافيس اكسبي الى 2003 لعدة أجهزة كمبيوتر مرتبطة بالشبكة مع الحفاظ على كل واجهة من واجهات المستعمل الموجودة في الوارد و الإكسل واقصد يذللك الماكرو الإضافية .

لم أفهم المقصود ، هل يمكنك التوضيح أكثر خصوصا ما تحته خط ؟

#32

السلام عليكم

اخي الكريم مشكور على المشارك

المقصود هو ملفات DOT XLA المبرمجة VBA

#33

طريقة عمل البرنامج

تتم خطوات المشروع في مايلي

1- قائمة الأجهزة

نقوم باضافه معلومات الاجهزه اي يكفي ان نعطيها عنوان الابي IP وبرمجيا هناكمايلي

المعطيات IP

*-وضيفة تعمل على WMI استرجاع اسم الجهاز

*-وظيفة تعمل على استرجاع اسم المستعمل المتصل ذ

*-وظيفة تعمل على استرجاع Office المثيت في الجهاز

كل هذه المعلومات مرتبه في dbgrid اي يكون بذلك كل ادوات التحيين الحذف الاضافة التغير

نحتاج زر اخر لنقل المعلومات من ملف اكسل الى الجدول المعلومات عي قاءمه العناوين IP لمذا اكسل لانه الاكثر استعمال من برامج اخري التي تستخرج عناوين IP من الاجهزة

*- listbox تحتوي على قاءمه الاجهزة الاتي تم رفضها من طرف البرنامج وذلك عدم توفر الشروط التالية

- النظام XP

-اصدار Office 2003 او XP

- اخر اعادة التشغيل للجهاز اقل كم اسبوع

... ساضع البقيه في وقتها

*-قاءمه تحوي على محتوي المفتاح OPEN المجود في الرجيستري

المحتوي هو عباره عن معلومات بها مكان تواجد الماكرو الاضافي نوعه ...الخ

ان حذفت سطر حذف الماكرو من الوارد او الاكسل مع انك لم تحذف الملف

اذن عندنا زر يسمح بملأ هذه القاءمه وعندنا ربط بواسطة العنوان IP كما هو موضح في MCD

قوانين التسيير الخاصة بهذه النافذة

1- لكل جهاز عدة مستعملين ويطلب من مستعمل البرنامج طلب من المستعمل الرئيسي او مالك الجهاز ان يفتح السيشن بكلمة مروره قبل تنفيذ البرنامج

2-لكل جهاز عدة ماكرو منها الخاصة بالكسل وذات اللحقة .XLA و الاخري الخاصة بالورد .DOT

الان المطلوب

*- واجهة المشروع

*-وضيفة تعمل على WMI استرجاع اسم الجهاز

*-ولمعرفة معلومات الرجيستري لابد من معرفة SID الخاص بالمستعمل

*-وظيفة تعمل على استرجاع اسم المستعمل المتصلWMI

*-وظيفة تعمل على استرجاع Office للاالمثيت في الجهاز الرجيستري

*-وظيفة لمعرفة امكانية الوصول الى الجهازWMI

Function GetOfficeV(iIP:string):string;

WMIPing(iIp:string):boolean

procedure GetRegInfo(iIP:string);

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 22 أغسطس 2008 في 17:23

#34
 

[color= #000000; font-weight: bold;]Function GetOfficeV[color= #009900;](iIP[color= #339933;]:string[color= #009900;])[color= #339933;]:string[color= #339933;];

[color= #000000; font-weight: bold;]var

     v_Don[color= #339933;],v_ListApp [color= #339933;]: string[color= #339933;];

     v_lisAppItm[color= #339933;]:TStringList[color= #339933;];

     i[color= #339933;]:Integer[color= #339933;];

CONST

 C_UninstKey      [color= #339933;]= [color= #0000ff;]'[color= #000099; font-weight: bold;]SOFTWARE[color= #000099; font-weight: bold;]Microsoft[color= #000099; font-weight: bold;]Windows[color= #000099; font-weight: bold;]CurrentVersion[color= #000099; font-weight: bold;]Uninstall'[color= #339933;];

begin

 Application[color= #339933;].ProcessMessages [color= #339933;];

 Result[color= #339933;]:=[color= #0000ff;]'Nil'[color= #339933;];

 v_lisAppItm[color= #339933;]:=TStringList[color= #339933;].Create[color= #339933;];

 [color= #b1b100;]if RegEnumRemoteKeys[color= #009900;](iIP[color= #339933;],HKEY_LOCAL_MACHINE[color= #339933;],C_UninstKey[color= #339933;],v_ListApp[color= #009900;]) then

  begin

     v_lisAppItm[color= #339933;].Text[color= #339933;]:=v_ListApp[color= #339933;];

     [color= #b1b100;]for I [color= #339933;]:= [color= #cc66cc;]0 to v_lisAppItm[color= #339933;].[color= #990000;]Count [color= #339933;]- [color= #cc66cc;]1 [color= #b1b100;]do

     begin

         Application[color= #339933;].ProcessMessages [color= #339933;];

         v_Don[color= #339933;]:=ReadRegRemoteLM[color= #009900;](iIP[color= #339933;],iKey[color= #339933;],[color= #0000ff;]'DisplayName'[color= #009900;])[color= #339933;];

         [color= #b1b100;]if Length[color= #009900;](v_Don[color= #009900;])[color= #339933;]>[color= #cc66cc;]0 then

         begin

            [color= #b1b100;]if [color= #009900;]([color= #990000;]pos[color= #009900;]([color= #0000ff;]'Microsoft Office XP Professional'[color= #339933;],v_Don[color= #009900;]) [color= #339933;]>[color= #cc66cc;]0 [color= #009900;]) then

            begin

                Result[color= #339933;]:=[color= #0000ff;]'XP'[color= #339933;];

                [color= #990000;]exit[color= #339933;];

            [color= #990000;]end

            [color= #b1b100;]Else

            begin

                  [color= #b1b100;]if [color= #009900;]([color= #990000;]pos[color= #009900;]([color= #0000ff;]'Microsoft Office Professional Edition 2003'[color= #339933;],v_Don[color= #009900;]) [color= #339933;]>[color= #cc66cc;]0 [color= #009900;]) and [color= #009900;]([color= #990000;]pos[color= #009900;]([color= #0000ff;]'20
03'[color= #339933;],v_Don[color= #009900;]) [color= #339933;]>[color= #cc66cc;]0 [color= #009900;]) then

                  begin

                      Result[color= #339933;]:=[color= #0000ff;]'2003'[color= #339933;];

                      [color= #990000;]exit[color= #339933;];

                  [color= #990000;]end

                  [color= #b1b100;]else

                         Result[color= #339933;]:=[color= #0000ff;]'Nil'[color= #339933;];

            [color= #990000;]end

         [color= #990000;]end

         [color= #b1b100;]Else

            Result[color= #339933;]:=[color= #0000ff;]'Nil'[color= #339933;];

     [color= #990000;]end[color= #339933;];

  [color= #990000;]end[color= #339933;];

[color= #990000;]end[color= #339933;];
#35

لاستعمال WMI في الديلفي

اقتباس
There are a couple tricks for using WMI in Delphi. First, the WMI core components have to be installed in the OS. Only Windows 2000 and XP and possibly ME include the core components by default. For Windows 98 and NT (I'm not sure about ME) you will need to download the WMI core from Microsoft. Go to http://www.microsoft.com/downloads/search.asp?

and do a Keyword search for "WMI" (sans quotes). Make sure you select

All Downloads in the "Show Results For" box. You want the file labeled

Windows Management Instrumentation (WMI) CORE 1.5 (Windows 95/98/NT 40)

Version 1.5 dated Feb. 11, 2000.

After installing the WMI core, you'll need to import this type library into Delphi: Microsoft WMI Scripting v1.1 Library (Version 1.1)

Go to Project/Import Type Library and Install it in the IDE.

In your programs uses statement, you'll need to include ActiveX and WbemScripting_TLB. (WbemScripting_TLB will be available after the import I mentioned earlier)

لقد جربت

اقتباس
Function WMIArretProcess(NomPC:String;PID:Integer):Boolean;

ونجحت العملية

BLooDY - StOrM

4c9osp1.jpg

أشهد ان لا اله الا الله واشهد ان محمد رسول الله

#37

post-1034-1219603016.jpg محاولت لواجهة البرنامج بالدلفي نت مع السبلاش

ارجوا من الاخوة العمل مثله بالدلفي win32 مع امكانيت التغيير و المحافظه على المضمون

/index.php?showtopic=169494

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 25 أغسطس 2008 في 10:53

#38

السلام عليكم

لسنا بحاجة الى معرفة PID لانهاء عمل البروسس هذا ما اخبرني به الاخ في منتدي الفيبي بعد ان قام بتجربتها بوضع اسم البروسس فقط

شكرا

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

لم اكن متوقع هذا الانتضار الطويل وكما قلت سابقا سابدا العمل قريبا ولن اجد الوقت للمتابعة ارجوا من الاخوة العمل بسرعة لانهاء المشروع .

#39

السلام عليكم

اضن اني ساكمل وحدي المشروع وكم هو صعب فاليد الواحدة لا تصفق

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

المحاولت 1

MXP2003_win32.rar

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 29 أغسطس 2008 في 22:51

#40

السلام عليكم

في المرفقات تطبيق صغير لجلب معلومات النظام التي نريدها

وهي اسم الجهاز

اسم المستخدم الحالي

رقم SID

اصدار OFFICE

المطلوب اعادة تنضيم الاكواد و وضعها في المشروع و الدي وضعت رابطته في الرد السابق

اي

عندما نكتب عنوان الابي في edit يتم جلب كل المعلومات ووضعها في الجدول عند النقر غلى زر الاظافة

Test1.rar

#41

اين مشاركاتكم يا اخوان

وهل جرب احدكم المرفق

والدي فيه اتصال بالرجيستري لجهاز على الشبكة وwMI

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 13 سبتمبر 2008 في 16:16

#42

بسم الله الرحمن الرحيم

اليوم 28 / سبتمبر 2008 اعلن توقف من ادارة المشروع ولذلك لعدم مشاركة الاخوة ربما لانه ليس في المستوى المطلوب .

وفقكم الله في المشاريع الاخرى .

لست ادري هل يجب اغلاق الموضوع ام لا على المشرفين القرار .

كان بوسعي تقديم السورس كاملا وحتي بلا مشاركاتكم لكن لا استطيع لكون المشروع بيع الى شركة ODDO

شكرا و في مشاريع مقبلة ان شاء الله

تم تعديل هذه المشاركة بواسطة زكيري عبد العالي في 28 سبتمبر 2008 في 13:55

#43
اقتباس
اليوم 28 / سبتمبر 2008 اعلن توقف من ادارة المشروع ولذلك لعدم مشاركة الاخوة ربما لانه ليس في المستوى المطلوب .

المشروع في المستوي

كان بودي اكمال هدا المشروع معك اخي زكيري عبد العالي

لكن الضروف لم تسمح لي بدلك فانا الان في الخدمة الوطنية ( العامين ) :S :S

BLooDY - StOrM

4c9osp1.jpg

أشهد ان لا اله الا الله واشهد ان محمد رسول الله

هذا الموضوع مغلق.

مواضيع مشابهة