يبحث هذا البرنامج ويسرد معرفات جميع العمليات باستثناء هذه العملية في النظام ، محددات الملفات المقابلة ، أولوية ، مشاركة وحدة المعالجة المركزية ، عدد المواضيع ، معلومات العملية ذات الصلة ، إلخ. العملية المحددة.
عند تشغيل هذا البرنامج ، سيتم إضافة رمز في منطقة علبة النظام ، لن يظهر في قائمة المهام التي تظهر عند الضغط على Ctrl+Alt+Del ، ولن يتم عرض زر المهمة على شريط المهام ، وسيكون ذلك مخبأة تلقائيا عندما تكون غير نشطة أو تقليلها. لن يتم تشغيله مرارًا وتكرارًا.
هذا البرنامج يتجنب أساليب التشغيل المتكررة للبرامج فريدة من نوعها. لأنه بعد أن جربت بعض الطرق على الإنترنت ، وجدت أنه عندما تم تنشيط البرنامج من الحالة المصورة ، لا يمكن تقليل النافذة عند النقر فوق زر تقليل النافذة. لذلك يعتمد المؤلف طريقة إرسال ومعالجة الرسائل المخصصة. عند تشغيل البرنامج ، قم أولاً بتعداد Windows في النظام. يعرض برنامج التشغيل نافذة بعد تلقي الرسالة المخصصة.
// Project File ProcviewPro.dpr
برنامج ProcviewPro ؛
يستخدم
النماذج ، النوافذ ، الرسائل ، الرئيسية في 'procview.pas' {form1} ؛
{$ r *.res}
{
// هذا تلقائي حسب النظام
يبدأ
application.initialize ؛
application.title: = 'مراقبة عملية النظام' ؛
application.createform (tform1 ، form1) ؛
application.run ؛
نهاية.
}
var
myhwnd: hwnd ؛
يبدأ
myhwnd: = FindWindow (NIL ، "مراقبة عملية النظام") ؛
إذا myhwnd = 0 ثم // لم يتم العثور عليها ، تابع الجري
يبدأ
application.initialize ؛
application.title: = 'مراقبة عملية النظام' ؛
application.createform (tform1 ، form1) ؛
application.run ؛
نهاية
else // اكتشف النافذة ، أرسل رسالة منطقة صينية نظام انقر فوق الماوس لتنشيط النافذة
postmessage (myhwnd ، wm_systraymsg ، 0 ، wm_lbuttondown) ؛
{
.
showwindow (myhwnd ، sw_restore) ؛
Flashwindow (myhwnd ، صحيح) ؛
}
نهاية.
{
// فيما يلي طريقة لاستخدام الذرات العالمية لتجنب التشغيل المتكرر للبرامج
كونست
Atomstr = 'procview' ؛
var
ذرة: عدد صحيح ؛
يبدأ
إذا كان GlobalFindatom (Atomstr) = 0 ثم
يبدأ
الذرة: = GlobalAddatom (Atomstr) ؛
مع التطبيق تفعل
يبدأ
تهيئة
العنوان: = "مراقبة عملية النظام" ؛
CreateForm (tform1 ، form1) ؛
يجري؛
نهاية؛
Globaldeleteatom (Atom) ؛
نهاية؛
نهاية.
}
// وحدة ملف procview.pas
وحدة Procview ؛
واجهة
يستخدم
Windows ، الرسائل ، sysutils ، الفئات ، الرسومات ، عناصر التحكم ، النماذج ، الحوار ،
stdctrls ، tlhelp32 ، buttons ، comctrls ، extctrls ، shellapi ، myflag ؛
كونست
process_terminate = 0 ؛
systray_id = 1 ؛
wm_systraymsg = wm_user+100 ؛
يكتب
tform1 = فئة (tform)
lvsysproc: TlistView ؛
lblsysproc: tlabel ؛
lblaboutproc: tlabel ؛
LvaboutProc: TlistView ؛
lblcountsysproc: tlabel ؛
lblCountaboutProc: tlabel ؛
لوحة 1: tpanel ؛
btndetermine: tbutton ؛
btnrefresh: tbutton ؛
Lblothers: tlabel ؛
lblemail: tlabel ؛
myflag1: tmyflag ؛
الإجراء btnrefreshclick (المرسل: T object ) ؛
الإجراء btndetermineclick (المرسل: T object ) ؛
الإجراء lvSysprocclick (المرسل: T object ) ؛
Formcreate الإجراء (المرسل: T object ) ؛
الإجراء apponminimize (المرسل: T object ) ؛
الإجراء formclose (المرسل: كائن T ؛ var الإجراء: tcloseaction) ؛
الإجراء FormDeactive (المرسل: T Object ) ؛
الإجراء lbleMailclick (المرسل: T object ) ؛
الإجراء FormResize (Sender: T Object ) ؛
خاص
{إعلانات خاصة}
fshandle: Thandle ؛
Formoldheight ، formoldwidth: integer ؛
الإجراء systray onclick (var message: tmessage) ؛ message wm_systraymsg ؛
عام
{الإعلانات العامة}
نهاية؛
var
Form1: Tform1 ؛
idid: dword ؛
FP32: tprocessentry32 ؛
FM32: tmoduleentry32 ؛
Systrayicon: tnotifyicondata ؛
تطبيق
{$ r *.dfm}
وظيفة REGRESSREVICEPROCESS (DWPROCESSID ، DWTYPE: integer): integer ؛ stdcall ؛ خارجي 'kernel32.dll' ؛
الإجراء tform1.btnrefreshclick (المرسل: T object ) ؛
var
CLP: Bool ؛
NewItem1: TiListItem ؛
ميكون: تيكون ؛
iconindex: كلمة ؛
Procfile: Array [0..max_path] of Char ؛
يبدأ
myicon: = ticon.create ؛
lvsysproc.items.clear ؛
lvsysproc.smallimages.clear ؛
fshandle: = CreateToolHelp32Snapshot (Th32CS_SnapProcess ، 0) ؛
fp32.dwsize: = sizeof (fp32) ؛
CLP: = process32first (fshandle ، fp32) ؛
iconindex: = 0 ؛
بينما عدد صحيح (clp) <> 0 تفعل
يبدأ
إذا كان fp32.th32processid <> getCurrentProcessid ثم
يبدأ
NewItem1: = lvsysproc.items.add ؛
{
newItem1.Caption: = fp32.szexefile ؛
myicon.handle: = extracticon (form1.handle ، fp32.szexefile ، 0) ؛
}
strcopy (procfile ، fp32.szexefile) ؛
newItem1.Caption: = procfile ؛
myicon.handle: = extractassocirecon (hinstance ، procfile ، iconindex) ؛
إذا myicon.handle <> 0 ثم
يبدأ
مع lvsysproc تفعل
يبدأ
newItem1.ImageIndex: = smallimages.addicon (myicon) ؛
نهاية؛
نهاية؛
مع NewItem1.Subitems تفعل
يبدأ
إضافة (inttoHex (fp32.th32Processid ، 4)) ؛
إضافة (inttoHex (FP32.th32ParentProcessid ، 4)) ؛
إضافة (inttoHex (FP32.pcpriclassbase ، 4)) ؛
إضافة (inttoHex (fp32.cntusage ، 4)) ؛
إضافة (inttoStr (fp32.cntThreads)) ؛
نهاية؛
نهاية؛
CLP: = process32next (fshandle ، fp32) ؛
نهاية؛
CloseHandle (fshandle) ؛
lblCountsysproc.caption: = inttoStr (lvsysproc.items.count) ؛
myicon.free ؛
نهاية؛
الإجراء tform1.btndetermineclick (المرسل: T object ) ؛
var
Processhndle: Thandle ؛
يبدأ
مع lvsysproc تفعل
يبدأ
إذا تم تحديده = لا شيء
يبدأ
MessageBox (form1.handle ، "يرجى تحديد العملية المراد إنهائها أولاً!" ، "Operation Prompt" ، mb_ok+mb_iconinformation) ؛
نهاية
آخر
يبدأ
إذا كانت MessageBox (form1.handle ، pchar ('إنهاء'+itemFocused.caption+'؟')
، "عملية إنهاء" ، mb_yesno+mb_iconwarning+mb_defbutton2) = mryes ثم
يبدأ
idid: = strtoint ('$'+itemFocused.SubItems [0]) ؛
ProcessHndle: = OpenProcess (process_ertaminate ، bool (0) ، idid) ؛
إذا كان عدد صحيح (TerminateProcess (ProcessShndle ، 0)) = 0 ثم
MessageBox (form1.handle ، pchar ("لا يمكن إنهاء"+itemFocused.caption+'!')
، "فشل العملية" ، mb_ok+mb_ic onerror )
آخر
يبدأ
select.delete ؛
lvaboutproc.items.clear ؛
lblCountsysproc.caption: = inttoStr (lvsysproc.items.count) ؛
lblCountaboutProc.caption: = '' ؛
نهاية
نهاية؛
نهاية؛
نهاية؛
نهاية؛
الإجراء tform1.lvsysprocclick (المرسل: T object ) ؛
var
NewItem2: TiLiTItem ؛
CLP: Bool ؛
يبدأ
إذا lvsysproc.selected <> nil ثم
يبدأ
idid: = strtoint ('$'+lvsysproc.itemfocused.subitems [0]) ؛
lvaboutproc.items.clear ؛
fshandle: = createToolHelp32Snapshot (Th32CS_SnapModule ، idid) ؛
fm32.dwsize: = sizeof (fm32) ؛
clp: = module32first (fshandle ، fm32) ؛
بينما عدد صحيح (clp) <> 0 تفعل
يبدأ
NewItem2: = lvaboutproc.items.add ؛
مع NewItem2 تفعل
يبدأ
التسمية التوضيحية: = fm32.SzeexePath ؛
مع newItem2.SubItems تفعل
يبدأ
إضافة (inttohex (fm32.th32moduleid ، 4)) ؛
إضافة (inttoHex (fm32.glblcntusage ، 4)) ؛
إضافة (inttohex (fm32.procntusage ، 4)) ؛
نهاية؛
نهاية؛
clp: = module32next (fshandle ، fm32) ؛
نهاية؛
CloseHandle (fshandle) ؛
lblCountaboutProc.caption: = inttoStr (lvaboutproc.items.count) ؛
نهاية
نهاية؛
الإجراء tform1.FormCreate (المرسل: T object ) ؛
يبدأ
مع التطبيق تفعل
يبدأ
showwindow (مقبض ، sw_hide) ؛
onMinimize: = apponminimize ؛
onDeactive: = formDeactive ؛
onActivate: = btnrefreshclick ؛
نهاية؛
RegiserviceProcess (GetCurrentProcessid ، 1)
مع systrayicon تفعل
يبدأ
cbsize: = sizeof (systrayicon) ؛
wnd: = مقبض ؛
uid: = systray_id ؛
uflags: = nif_icon أو nif_message أو nif_tip ؛
ucallbackMessage: = wm_systraymsg ؛
Hicon: = application.icon.handle ؛
sztip: = 'مراقبة عملية النظام' ؛
نهاية؛
Shell_notifyicon (NIM_ADD ،@systrayicon) ؛
مع lvsysproc تفعل
يبدأ
SmallImages: = timagelist.createsize (16،16) ؛
smallimages.shareimages: = صواب ؛
نهاية؛
formoldwidth: = self.width ؛
formoldheight: = self.hight ؛
نهاية؛
// يتم إخفاءه تلقائيًا عند التقليل منه
الإجراء tform1.ApponMinimize (المرسل: T object ) ؛
يبدأ
showwindow (application.handle ، sw_hide) ؛
نهاية؛
// استجابة الماوس للنقر على أيقونة منطقة علبة النظام
الإجراء tform1.Systray onClick (var message: tmessage) ؛
يبدأ
مع رسالة تفعل
يبدأ
if (lparam = wm_lbuttondown) أو (lparam = wm_rbuttondown) ثم
يبدأ
Application.Restore ؛
setForeGroundWindow (مقبض) ؛
showwindow (application.handle ، sw_hide) ؛
نهاية؛
نهاية؛
نهاية؛
الإجراء tform1.FormClose (المرسل: T Object ؛ var الإجراء: tcloseaction) ؛
يبدأ
Shell_notifyicon (NIM_DELETE ،@systrayicon) ؛
RecisterviceProcess (GetCurrentProcessid ، 0) ؛
lvsysproc.smallimages.free ؛
نهاية؛
// سوف يختبئ تلقائيًا عندما يكون غير نشط
الإجراء tform1.FormDeActive (المرسل: T Object ) ؛
يبدأ
application.minimize ؛
نهاية؛
الإجراء tform1.lbledClick (المرسل: T object ) ؛
يبدأ
إذا كانت ShellexeCute (مقبض ، "مفتوح" ، PCHAR ('mailto: [email protected]') ، nil ، nil ، sw_show) <33 ثم
MessageBox (form1.handle ، "لا يمكن بدء برنامج البريد الإلكتروني!" ، "أنا آسف" ، mb_iconinformation+mb_ok) ؛
نهاية؛
// اضبط موضع كل مكون عندما يتغير حجم النموذج
الإجراء tform1.formResize (المرسل: T Object ) ؛
يبدأ
مع Pane1 do top: = top+self.hight-formoldheight ؛
مع lvsysproc تفعل
يبدأ
العرض: = العرض+self.width-formoldwidth ؛
نهاية؛
مع lvaboutproc تفعل
يبدأ
الارتفاع: = الارتفاع+الذات.
العرض: = العرض+self.width-formoldwidth ؛
نهاية؛
formoldwidth: = self.width ؛
formoldheight: = self.hight ؛
نهاية؛
نهاية.
يمكن تجميع البرامج أعلاه وتشغيلها بشكل طبيعي في الإصدار الصيني Windows 95 و Windows 95 و Delphi 5 و Windows 97 الصيني. إذا كان لديك أي أسئلة ، فيرجى إرسال بريد إلكتروني إلى: [email protected] للمناقشة معي.
بوستسكريبت:
في الكود أعلاه ، تعد RecisterServiceProcess () وظيفة واجهة برمجة تطبيقات غير منشورة موجودة فقط في Win 9x.
بعد تعلم Masm32 ، قمت بإعادة كتابة هذا البرنامج وتحسينه باستخدام Masm32
يمكن للأصدقاء المهتمين تنزيل أحدث إصدار:
http://www.hcny.gov.cn/netres/download/procview.rar