مثال على تنفيذ دلفي للحصول على قائمة العمليات والمعلومات ذات الصلة
مقدمة:
ليس لدي ما أفعله. من الممتع أن ألقي نظرة على مدير المهام. لقد تحققت من المعلومات وقمت بتنفيذها لفترة وجيزة. لا يوجد رمز للحصول على استخدام وحدة المعالجة المركزية في الكود طريقة الكتابة، لذلك لن أكتبها هنا. سنستمر في تحسينه في المستقبل، ولكن لا يمكن الحصول على المعلومات حول عملية النظام والنظام حتى الآن، إذا كان أي شخص يعرف، يمكنني أن أقدم لك تذكيرًا.
الرمز هو كما يلي
تستخدم واجهة الوحدة الرئيسية Windows، والرسائل، وSysUtils، والمتغيرات، والفئات، والرسومات، وعناصر التحكم، والنماذج، ومربعات الحوار، وTlHelp32، وStdCtrls، وComCtrls، وpsAPI؛ TForm1= class(TForm) btn_Get: TButton; Lv_Process: TListView; الإجراء btn_GetClick(Sender: TObject); الإجراء FormCreate(Sender: TObject); وظيفة GetMemUsedText(memsize:Cardinal):string; :سلسلة؛ GetCupUsedPercent(hprocess:THandle):string; function GetProcessUser(hprocess:THandle):string; public { Public notifications } end; var Form1: TForm1; استخدم Vista لقراءة معلومات النظام ضمن Win7، تحتاج إلى تشغيله كمسؤول}. PromotionProcessPrivilege(Processhandle:Thandle;Token_Name:pchar):boolean; var Token:cardinal;_TOKEN_PRIVILEGES; Luid:int64; begin Result:=false; يبدأ // انظر إلى قيمة امتياز أذونات النظام إذا كان LookupPrivilegeValue(nil,Token_Name,Luid) يبدأ TokenPri.PrivilegeCount:=1; TokenPri.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED; Luid; i:=0; AdjustTokenPrivileges(Token,false,TokenPri,sizeof(TokenPri),nil,i) ثم Result:=true end; CloseHandle(Token end; : TSystemTime begin FileTimeToSystemTime(KernelTime, SysTimeK); FileTimeToSystemTime(UserTime, SysTimeU); (procID، وقت الإنشاء، وقت الخروج، KernelTime,UserTime); معلومات الذاكرة pPMC:PPROCESS_MEMORY_COUNTERS؛ pPMCSize,ProcessPriority:Cardinal; n:DWORD; fName:array [0..MAX_PATH-1] of char; start // إنشاء لقطة للعملية hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); // البحث عن العملية الأولى := Process32First(hSnapShot,pEntry); أثناء البحث، ابدأ العنصر := Lv_Process.Items.Add; // اسم العملية item.Caption := pEntry.szExeFile; // معرف العملية item.SubItems.Add(IntToStr(pEntry.th32ProcessID)); ); GetMem(pPMC,pPMCSize); pPMCSize // افتح العملية وقم بزيادة إذن PROCESS_VM_READ بحيث يمكن استخدام hProcess للحصول على المسار الكامل لاحقًا:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,pEntry.th32ProcessID); // احصل على معلومات الذاكرة if GetProcessMemoryInfo(hProcess,pPMC ،pPMCSize) ثم ابدأ // احصل على مستخدم العملية item.SubItems.Add(GetProcessUser(hProcess)); // عنصر استخدام الذاكرة.SubItems.Add(GetMemUsedText(pPMC.WorkingSetSize)); // ذروة الذاكرة item.SubItems.Add(GetMemUsedText( pPMC.PeakWorkingSetSize)); // وقت وحدة المعالجة المركزية item.SubItems.Add(FormatDateTime('hh:mm:ss',GetProcCPUTime(hProcess))); // الحصول على الأولوية ProcessPriority := GetPriorityClass(hProcess); item.SubItems.Add(GetProcessPriority(ProcessPriority) ) ; // ابحث عن مقبض الوحدة وفقًا لمقبض العملية ENumProcessModules(hProcess,@hModel,SizeOf(hModel),n); // احصل على المسار الكامل GetModuleFileNameEx(hProcess,hModel,fName,Length(fName)); Add(fName) ; end; Process32Next(hSnapShot,pEntry); end; function TForm1.GetCupUsedPercent(hprocess: THandle): string; start end; وظيفة ك'؛ TForm1.GetProcessPriority(priority: Cardinal): سلسلة؛ أولوية حالة البدء لـ IDLE_PRIORITY_CLASS: النتيجة:= 'منخفضة'؛ NORMAL_PRIORITY_CLASS: النتيجة:= 'طبيعية'؛ نهاية؛ // احصل على وظيفة العملية TForm1.GetProcessUser(hprocess: THandle): string; var hToken:THandle; //افتح الأذونات إذا لم يكن الأمر كذلك OpenProcessToken(hprocess,TOKEN_QUERY,hToken) ثم Exit; // احصل على معلومات الرمز المميز، تستخدم المعلمة الثالثة هنا nil، والتي تُرجع أولاً الحجم الفعلي dwSize، ثم تخصص الذاكرة وفقًا لهذا الحجم GetTokenInformation(hToken,TokenUser,nil,0 , pUser := nil; // تخصيص مساحة ReallocMem(pUser,dwSize); := 0; dwDomainSize := 0; // احصل على المعلومات إن لم تكن GetTokenInformation(hToken,TokenUser,pUser,dwSize,dwSize) ثم Exit; // للعثور على معلومات المستخدم، قم أولاً بإرجاع اسم المستخدم وحجم اسم المجال، بالطبع، يمكنك أيضًا الحصول عليها مرة واحدة، أي دون استخدام المصفوفة الديناميكية LookupAccountSid(nil,pUser.User.Sid,nil,dwUserSize. ,nil,dwDomainSize,peUse); if ( dwUserSize <> 0) و (dwDomainSize <> 0) ثم ابدأ // تخصيص الطول SetLength(szUserName,dwUserSize); SetLength(szDomainName,dwDomainSize); // مرة أخرى، احصل على اسم المستخدم واسم المجالLookupAccountSid(nil,pUser.User.Sid,PChar(szUserName),dwUserSize,PChar(szDomainName), dwDomainSize, peUse end; PChar(szUserName)+'/'+PChar(szDomainName); FreeMem(pUser); end;
تشغيل الصورة
إذا كان لديك أي أسئلة، يرجى ترك رسالة أو الذهاب إلى مجتمع هذا الموقع للتواصل والمناقشة. شكرًا لك على القراءة، وآمل أن تتمكن من مساعدة الجميع. شكرًا لك على دعمك لهذا الموقع.