Dieses Programm sucht und listet die IDs aller Prozesse mit Ausnahme dieses Prozesses im System, entsprechende Dateispezifizierer, Priorität, CPU -Freigabe, Anzahl der Threads, zugehörigen Prozessinformationen usw. auf, indem Sie mehrere API -Funktionen in Kernel32.dll aufrufen und abbrechen. der ausgewählte Prozess.
Wenn dieses Programm ausgeführt wird, wird ein Symbol im Systemablettungsbereich hinzugefügt. Es wird weder in der Aufgabenliste angezeigt, die beim Drücken von Strg+Alt+Del angezeigt wird, noch wird die Taste -Taste in der Taskleiste angezeigt, und es wird nicht automatisch versteckt, wenn sie inaktiv oder minimiert werden. Es wird nicht wiederholt ausgeführt.
Dieses Programm vermeidet, dass wiederholte laufende Programmmethoden eindeutig sind. Denn nachdem ich einige Methoden im Internet ausprobiert hatte, stellte ich fest, dass das Fenster beim Klicken auf das Fenster nicht minimiert werden konnte, wenn das Programm aus dem minimierten Status aktiviert wurde. Daher übernimmt der Autor die Methode zum Senden und Verarbeitung benutzerdefinierter Nachrichten. Wenn das Programm ausgeführt wird, zählen Sie zuerst die Fenster im System auf. Das ausgeführte Programm zeigt ein Fenster an, nachdem die benutzerdefinierte Nachricht empfangen wird.
// Projektdatei Procviewpro.dpr
Programm Procviewpro;
Verwendung
Formulare, Windows, Nachrichten, Haupt in 'Procview.pas' {Form1};
{$ R *.res}
{
// Dies ist automatisch vom System
Beginnen
application.initialize;
Application.titel: = 'Systemprozessüberwachung';
Application.createForm (tform1, Form1);
Anwendung.Run;
Ende.
}
var
myhwnd: hwnd;
Beginnen
MyHWnd: = FindWindow (nil, 'Systemprozessüberwachung');
Wenn myhwnd = 0 dann // nein gefunden wird, laufen Sie weiter
Beginnen
Application.initialize;
Application.titel: = 'Systemprozessüberwachung';
Application.createForm (tform1, Form1);
Anwendung.Run;
Ende
Ansonsten // Entdecken Sie das Fenster, senden Sie die Mausklick -Klick -Meldung der Systemabberufe, um das Fenster zu aktivieren
postMessage (myhwnd, wm_systraymsg, 0, wm_lbuttondown);
{
// Der Nachteil der folgenden Methode lautet: Wenn sich das Fenster ursprünglich in einem minimierten Status befand, minimiert die Schaltfläche "Auf die Schaltfläche" auf das Fenster minimiert, nachdem die Aktivierung das Fenster nicht minimiert.
showWindow (myhwnd, sw_restore);
Flashwindow (myhwnd, wahr);
}
Ende.
{
// Folgendes ist eine Methode, um globale Atome zu verwenden, um wiederholtes Ausführen von Programmen zu vermeiden
Const
atomstr = 'procview';
var
Atom: Ganzzahl;
Beginnen
Wenn globalFindatom (atomstr) = 0 dann
Beginnen
Atom: = GlobalAddatom (Atomstr);
mit Anwendung
Beginnen
Initialisieren;
Titel: = 'Systemprozessüberwachung';
CreateForm (tform1, Form1);
Laufen;
Ende;
GLOBALDELETEATOM (ATOM);
Ende;
Ende.
}
// Einheit Datei procview.pas
Einheit Procview;
Schnittstelle
Verwendung
Windows, Nachrichten, Systeme, Klassen, Grafiken, Steuerelemente, Formulare, Dialoge,
Stdctrls, tlhelp32, buttons, comctrls, extctrls, Shellapi, myflag;
Const
Process_termate = 0;
SYSTRAY_ID = 1;
Wm_systraymsg = wm_user+100;
Typ
Tform1 = Klasse (tform)
LVSYSPROC: TListView;
LBLSYPROC: TLABEL;
lblaboutproc: tlabel;
LvaboutProc: TlistView;
LBLCountSysProc: Tlabel;
lblCountaboutproc: tlabel;
Panel1: tpanel;
Btndetermin: tbutton;
Btnrefresh: Tbutton;
LBLOTHERS: TLABEL;
LBLEMAIL: Tlabel;
Myflag1: tmyflag;
Prozedur BtnreFreshClick (Absender: T -Objekt );
Prozedur BtndeterMineClick (Absender: T -Objekt );
procedure lvSyProcclick (Absender: T -Objekt );
Prozedur Formcreate (Absender: T -Objekt );
Prozedur ApponMinimize (Absender: T -Objekt );
ProzedurformClose (Absender: T -Objekt ; var Aktion: tCLOSEAction);
ProzedurformularDectivate (Absender: t -Objekt );
procedure lBlemailClick (Absender: T -Objekt );
Procedure formResize (Absender: T -Objekt );
Privat
{Private Deklarationen}
FSHANDLE: THANDLE;
FormoldHeight, Formoldwidth: Ganzzahl;
Prozedur SYSTRAY ONCLICK (VAR -Nachricht: tMessage); Nachricht WM_SYSTRAYMSG;
öffentlich
{Öffentliche Erklärungen}
Ende;
var
Form1: tform1;
IDID: DWORD;
FP32: TprocessEntry32;
fm32: tmoduleEntry32;
SYSTRAYICON: tnotifyicondata;
Durchführung
{$ R *.dfm}
FunktionsregisterServiceProcess (DWProcessid, DWTYPE: Ganzzahl): Integer; stdcall; externe 'Kernel32.dll';
procedure tForm1.BTNREFRESHCLICK (Absender: T -Objekt );
var
CLP: bool;
newItem1: TlistItem;
Myicon: Ticon;
IconIndex: Wort;
Procfile: Array [0..max_path] von char;
Beginnen
Myicon: = ticon.create;
LVSYSPROC.ITEMS.Clear;
LVSYSPROC.SMALLIMAGES.Clear;
fSandle: = CreateToolHelp32SnapShot (Th32CS_SnApprocess, 0);
FP32.DWSIZE: = sizeof (FP32);
CLP: = process32First (fSandle, FP32);
IconIndex: = 0;
während Integer (CLP) <> 0 tun
Beginnen
Wenn FP32.th32Processid <> getCurrentProcessid dann dann
Beginnen
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: = extractasociatedicon (Hinstance, Procfile, iconIndex);
Wenn myicon.handle <> 0 dann
Beginnen
mit LVSYProc tun
Beginnen
NewItem1.imageIndex: = smallimages.addicon (myicon);
Ende;
Ende;
mit newItem1.subItems tun
Beginnen
add (inttohex (fp32.th32processid, 4));
Add (inttohex (fp32.th32ParentProcessid, 4));
Add (inttohex (fp32.pcpricklassbase, 4));
Add (inttohex (FP32.Cntusage, 4));
Add (inttoStr (fp32.cntThreads));
Ende;
Ende;
CLP: = process32Next (fSandle, FP32);
Ende;
nahe Handle (früge);
LBLCountSySProc.Caption: = inttoStr (lvSysproc.Items.Count);
Myicon.Free;
Ende;
procedure tform1.BTNDeterMineClick (Absender: T -Objekt );
var
ProcessHndle: Thandle;
Beginnen
mit LVSYProc tun
Beginnen
wenn ausgewählt = nil dann
Beginnen
MessageBox (Form1.Handle, "Bitte wählen Sie den Prozess, der zuerst beendet werden soll!", "Operation prompt", mb_ok+mb_iconinformation);
Ende
anders
Beginnen
Wenn MessageBox (Form1.Handle, pchar ('terminate'+itemFocused.Caption+'?')
, 'Terminate Process', MB_YESNO+MB_ICONWARNING+MB_DEFBUTTON2) = Mryes dann
Beginnen
idid: = strtoint ('$'+itemFocused.SubItems [0]);
processHndle: = openProcess (process_terminate, bool (0), idid);
Wenn Ganzzahl (TerminateProcess (processShnddle, 0)) = 0 dann
MessageBox (Form1.Handle, pchar ('kann nicht terminieren'+itemFocused.Caption+'!')
, 'Operation fehlgeschlagen', MB_OK+MB_IC OnError )
anders
Beginnen
Ausgewählt.Delete;
lvaboutproc.items.clear;
LBLCountSySProc.Caption: = inttoStr (lvSysproc.Items.Count);
lblCountaboutProc.Caption: = '';
Ende
Ende;
Ende;
Ende;
Ende;
procedure tForm1.lvSyProcClick (Absender: T -Objekt );
var
newItem2: tlistItem;
CLP: bool;
Beginnen
Wenn LVSYSPROC.Selected <> nil dann
Beginnen
IDID: = Strtoint ('$'+lvSySProc.Itemfocused.SubItems [0]);
lvaboutproc.items.clear;
fSandle: = CreateToolHelp32Snapshot (Th32CS_SnapModule, idid);
fm32.dwsize: = sizeof (fm32);
CLP: = Modul32First (fSandle, fm32);
während Integer (CLP) <> 0 tun
Beginnen
newItem2: = lvaboutproc.items.add;
mit newItem2 tun
Beginnen
Bildunterschrift: = fm32.szeexepath;
mit newItem2.Subitems tun
Beginnen
add (inttohex (fm32.th32moduleid, 4));
add (inttohex (fm32.glblcntusage, 4));
add (inttohex (fm32.Proccntusage, 4));
Ende;
Ende;
CLP: = modul32Next (fSandle, fm32);
Ende;
nahe Handle (früge);
lblCountaboutProc.Caption: = inttoStr (lvaboutproc.Items.count);
Ende
Ende;
procedure tform1.formcreate (Absender: t -Objekt );
Beginnen
mit Anwendung
Beginnen
Showwindow (Handle, SW_Hide);
Onminimize: = Apponminimize;
ONDEACTIVATE: = FormDectivate;
Onaktiviert: = btnrefreshClick;
Ende;
RegisterServiceProcess (GetCurrentProcessid, 1);
mit Systrayicon tun
Beginnen
CBSIZE: = sizeof (systrayicon);
wnd: = Handle;
UID: = SYSTRAY_ID;
Uflags: = nif_icon oder nif_message oder nif_tip;
ucallbackMessage: = wm_systraymsg;
Hicon: = application.icon.Handle;
SZTIP: = 'Systemprozessüberwachung';
Ende;
Shell_notifyicon (nim_add,@systrayicon);
mit LVSYProc tun
Beginnen
Smallimages: = Timagelist.Createsize (16,16);
Smallimages.shareimages: = true;
Ende;
Formoldwidth: = self.width;
FormoldHeight: = self.height;
Ende;
// Es ist automatisch versteckt, wenn minimiert
procedure tform1.apponminimize (Absender: t -Objekt );
Beginnen
ShowWindow (application.Handle, sw_hide);
Ende;
// Antwort auf die Maus, um auf das Symbol des Systemablettungsbereichs zu klicken
procedure tForm1.SystRay Onclick (var message: tmessage);
Beginnen
mit Nachricht tun
Beginnen
if (lparam = wm_lbuttondown) oder (lparam = wm_rbuttondown) dann
Beginnen
Anwendung.Restore;
SetforecroundWindow (Handle);
showWindow (application.Handle, sw_hide);
Ende;
Ende;
Ende;
procedure tForm1.FormClose (Absender: t -Objekt ; var Aktion: tCLOSEAction);
Beginnen
Shell_notifyicon (nim_delete,@systrayicon);
RegisterServiceProcess (GetCurrentProcessid, 0);
LVSYSPROC.SMALLIMAGES.FREE;
Ende;
// es wird sich automatisch verstecken, wenn es inaktiv ist
procedure tForm1.FormDectivate (Absender: t -Objekt );
Beginnen
application.minimize;
Ende;
procedure tform1.lBlemailClick (Absender: T -Objekt );
Beginnen
Wenn Shellexecute (Handle, Open ", PCHAR ('Mailto: [email protected]'), NIL, NIL, SW_SHOW) <33 Dann
MessageBox (Form1.Handle, "Die E -Mail -Software kann nicht starten!", "Ich sorry", mb_iconinformation+mb_ok);
Ende;
// Passen Sie die Position jeder Komponente an, wenn sich die Formulargröße ändert
procedure tform1.formResize (Absender: t -Objekt );
Beginnen
mit Panel1 do top: = top+self.height-forMPformHeight;
mit LVSYProc tun
Beginnen
Breite: = Breite+Self.Width-Formoldwidth;
Ende;
mit lvaboutproc tun
Beginnen
Höhe: = Höhe+Selbst.
Breite: = Breite+Self.Width-Formoldwidth;
Ende;
Formoldwidth: = self.width;
FormoldHeight: = self.height;
Ende;
Ende.
Die oben genannten Programme können in Delphi 2, Windows 95 Chinese -Version, Delphi 5 und Windows 97 Chinese Version kompiliert und normal ausgeführt werden. Wenn Sie Fragen haben, senden Sie bitte eine E -Mail an: [email protected], um mit mir zu diskutieren.
PostScript:
Im obigen Code ist RegISTERServiceProcess () eine unveröffentlichte API -Funktion, die nur in Win 9x vorhanden ist.
Nach dem Erlernen von Masm32 habe ich dieses Programm mit Masm32 neu geschrieben und verbessert
Interessierte Freunde können die neueste Version herunterladen:
http://www.hcny.gov.cn/netres/download/procview.rar