Contoh implementasi Delphi untuk memperoleh daftar proses dan informasi terkait
Kata pengantar:
Saya tidak ada hubungannya, dan menyenangkan untuk melihat pengelola tugas. Saya memeriksa informasinya dan mengimplementasikannya secara singkat. Tidak ada kode untuk mengetahui penggunaan CPU dalam kode tersebut cara penulisannya seperti itu, jadi saya tidak akan menulisnya di sini. Kedepannya akan terus kami perbaiki, namun informasi tentang Proses Sistem dan Sistem belum dapat diperoleh. Jika ada yang tahu, saya bisa mengingatkan Anda.
Kodenya adalah sebagai berikut
unit Utama; antarmuka menggunakan Windows, Pesan, SysUtils, Varian, Kelas, Grafik, Kontrol, Formulir, Dialog, TlHelp32, StdCtrls, ComCtrls, psAPI ketik PTokenUser = ^TToken_USER; TForm1 = kelas(TForm) btn_Get: TButton; Lv_Process: TListView; prosedur btn_GetClick(Pengirim: TObject); prosedur FormCreate(Pengirim: TObject); private { Deklarasi pribadi } fungsi GetMemUsedText(memsize:Cardinal):string; :tali; fungsi GetCupUsedPercent(hprocess:THandle):string; function GetProcessUser(hprocess:THandle):string; public { Deklarasi publik } end; var Form1: TForm1; gunakan Vista Untuk membaca informasi sistem di bawah Win7, Anda perlu menjalankannya sebagai fungsi administrator} PromoteProcessPrivilege(Processhandle:Thandle;Token_Name:pchar):boolean; var Token:cardinal; TokenPri:_TOKEN_PRIVILEGES; Luid:int64; mulai Hasil:=false; mulai //Lihat nilai hak istimewa izin sistem jika LookupPrivilegeValue(nil,Token_Name,Luid) lalu mulai TokenPri.PrivilegeCount:=1; TokenPri.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED; Luid; i:=0; //Tinggikan hak jika AdjustTokenPrivileges(Token,false,TokenPri,sizeof(TokenPri),nil,i) lalu Hasil:=true; end; CloseHandle(Token end; : TSystemTime; mulai FileTimeToSystemTime(KernelTime, SysTimeK); FileTimeToSystemTime(UserTime, SysTimeU); Hasil :=SystemTimeToDateTime(SysTimeK)+SystemTimeToDateTime(SysTimeU end; //Dapatkan fungsi waktu CPU GetProcCPUTime(procID:THandle): TDateTime; (procID, Waktu Pembuatan, Waktu Keluar, KernelTime,UserTime); Hasil := AddFileTimes(KernelTime, UserTime); prosedur TForm1.btn_GetClick(Pengirim: TObject); var hSnapShot,hProcess,hModel:THandle; Informasi memori pPMC:PPROCESS_MEMORY_COUNTERS; pPMCSize,ProcessPriority:Cardinal; n:DWORD; fName:array [0..MAX_PATH-1] dari char; mulai //Buat snapshot proses hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); ; //Proses pertama ditemukan := Process32First(hSnapShot,pEntry); saat mencari, lakukan mulai item := Lv_Process.Items.Add; //Nama proses item.Caption := pEntry.szExeFile; //Proses ID item.SubItems.Add(IntToStr(pEntry.th32ProcessID)); ); GetMem(pPMC,pPMCUkuran); pPMCSize; //Buka proses dan tingkatkan izin PROCESS_VM_READ sehingga hProcess dapat digunakan untuk mendapatkan path lengkap nanti:= OpenProcess(PROCESS_QUERY_INFORMATION atau PROCESS_VM_READ,False,pEntry.th32ProcessID); ,pPMCSize) lalu mulai //Dapatkan pengguna proses item.SubItems.Add(GetProcessUser(hProcess)); //Item penggunaan memori.SubItems.Add(GetMemUsedText(pPMC.WorkingSetSize)); //Item puncak memori.SubItems.Add(GetMemUsedText( pPMC.PuncakWorkingSetSize)); //waktu CPU item.SubItems.Add(FormatDateTime('hh:mm:ss',GetProcCPUTime(hProcess))); //Dapatkan prioritas ProcessPriority := GetPriorityClass(hProcess); ; //Temukan pegangan modul sesuai dengan pegangan proses ENumProcessModules(hProcess,@hModel,SizeOf(hModel),n); //Dapatkan jalur lengkap GetModuleFileNameEx(hProcess,hModel,fName,Length(fName)); Tambahkan(fNama) ; akhir; FreeMem(pPMC); CloseHandle(hProses); Process32Next(hSnapShot,pEntry); akhir; fungsi TForm1.GetCupUsedPercent(hproses: THandle): string; fungsi TForm1.GetMemUsedText(memsize: Cardinal): string; K'; akhir; TForm1.GetProcessPriority(prioritas: Kardinal): string; prioritas kasus awal IDLE_PRIORITY_CLASS: Hasil := 'rendah'; NORMAL_PRIORITY_CLASS: Hasil := 'nyata- waktu' ; akhir; //Dapatkan fungsi pengguna dari proses TForm1.GetProcessUser(hprocess: THandle): string; var hToken:THandle; dwSize,dwUserSize,dwDomainSize:DWORD; //Buka izin jika tidak OpenProcessToken(hprocess,TOKEN_QUERY,hToken) lalu Exit; //Dapatkan informasi token, parameter ketiga di sini menggunakan nil, yang mengembalikan ukuran sebenarnya dwSize terlebih dahulu, lalu mengalokasikan memori sesuai dengan ukuran ini GetTokenInformation(hToken,TokenUser,nil,0 , dwSize); pUser := nihil; //Alokasikan ruang ReallocMem(pUser,dwUserSize); := 0; dwDomainSize := 0; //Dapatkan informasi jika bukan GetTokenInformation(hToken,TokenUser,pUser,dwSize,dwSize) lalu Keluar; //Untuk mencari informasi pengguna, kembalikan terlebih dahulu nama pengguna dan ukuran nama domain. Tentu saja, Anda juga bisa mendapatkan semuanya sekaligus, yaitu tanpa menggunakan array dinamis LookupAccountSid(nil,pUser.User.Sid,nil,dwUserSize). ,nil,dwDomainSize,peUse); if ( dwUserSize <> 0) dan (dwDomainSize <> 0) lalu mulai //Alokasikan panjang SetLength(szUserName,dwUserSize); SetLength(szDomainName,dwDomainSize); //Sekali lagi, dapatkan nama pengguna dan nama domainLookupAccountSid(nil,pUser.User.Sid,PChar(szUserName),dwUserSize,PChar(szDomainName), dwDomainSize, peUse); akhir; Hasil := PChar(szUserName)+'/'+PCar(szDomainName); CloseHandle(hToken); FreeMem(pUser); prosedur TForm1.FormCreate(Pengirim: TObject);
Jalankan gambar
Jika Anda memiliki pertanyaan, silakan tinggalkan pesan atau kunjungi komunitas situs ini untuk berkomunikasi dan berdiskusi. Terima kasih telah membaca. Saya harap ini dapat membantu semua orang.