یکی از بخشهای مهم ویندوز بخش wmi میباشد که اطلاعات جامعی از منابع سیستم و پروسه ها ... را میتوان از ان دریافت نمود
یکی از چیزهایی که میتوان از این طریق دریافت کرد لیست پروسه ها میباشد
اطلاعات پروسه ای که از این طریق به شما داده میشود در زیر امده است
کد:
Win32_Process = CIM_Process record
{
Caption:string;
CommandLine:string;
CreationClassName:string;
CreationDate:datetime;
CSCreationClassName:string;
CSName:string;
Description:string;
ExecutablePath:string;
ExecutionState:uint16;
Handle:string;
HandleCount:uint32;
InstallDate:datetime;
KernelModeTime:uint64;
MaximumWorkingSetSize:uint32;
MinimumWorkingSetSize:uint32;
Name:string;
OSCreationClassName:string;
OSName:string;
OtherOperationCount:uint64;
OtherTransferCount:uint64;
PageFaults:uint32;
PageFileUsage:uint32;
ParentProcessId:uint32;
PeakPageFileUsage:uint32;
PeakVirtualSize:uint64;
PeakWorkingSetSize:uint32;
Priority:uint32;
PrivatePageCount:uint64;
ProcessId:uint32;
QuotaNonPagedPoolUsage:uint32;
QuotaPagedPoolUsage:uint32;
QuotaPeakNonPagedPoolUsage:uint32;
QuotaPeakPagedPoolUsage:uint32;
ReadOperationCount:uint64;
ReadTransferCount:uint64;
SessionId:uint32;
Status:string;
TerminationDate:datetime;
ThreadCount:uint32;
UserModeTime:uint64;
VirtualSize:uint64;
WindowsVersion:string;
WorkingSetSize:uint64;
WriteOperationCount:uint64;
WriteTransferCount:uint64;
};
این کلاس داری متدهای زیر میباشد
AttachDebugger
دیباگر پیشفرض را برای دیباگ یک پروسه اجرا میکند
Create ایجاد پروسه جدید.
GetOwner
نام کاربری و نام دومین یک پروسه را برمیگرداند
GetOwnerSid این متد security identifire یا همان CID یک پروسه را برمیگرداند
SetPriority
تغییر اولویت اجرای پروسه
Terminate
بستن یک پروسه
مثال
کد:
uses
ActiveX,ComObj
procedure GetWin32_proc32;
const
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
sngProcessTime: Double;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_Process','WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
while oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
Form1.lst1.Items.Add(Format('Process: %s',[String(FWbemObject.Name)]));
Form1.lst1.Items.Add(Format('Description: %s',[String(FWbemObject.Description)]));
Form1.lst1.Items.Add(Format('OSName: %s',[String(FWbemObject.OSName)]));
Form1.lst1.Items.Add(Format('Priority: %s',[String(FWbemObject.Priority)]));
sngProcessTime := (Int64(FWbemObject.KernelModeTime) + Int64(FWbemObject.UserModeTime)) / 10000000.0;
Form1.lst1.Items.Add(Format('Processor Time: %n',[sngProcessTime]));
Form1.lst1.Items.Add(Format('Process Id: %d',[Integer(FWbemObject.ProcessID)]));
Form1.lst1.Items.Add(Format('Working SetSize: %d',[Int64(FWbemObject.WorkingSetSize)]));
Form1.lst1.Items.Add(Format('Page File Usage: %d',[Int64(FWbemObject.PageFileUsage)]));
Form1.lst1.Items.Add(Format('Page Faults: %d',[Int64(FWbemObject.PageFaults)]));
Form1.lst1.Items.Add('');
FWbemObject:=Unassigned;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
GetWin32_proc32;
end;
http://msdn.microsoft.com/en-us/library/...85%29.aspx