unit Find_Unit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, TLHelp32, ComCtrls;
type
TFindForm = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
SB: TStatusBar;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function FindProc(ProcName: string): boolean;
end;
var
FindForm: TFindForm;
implementation
{$R *.DFM}
procedure TFindForm.Button1Click(Sender: TObject);
var
hFile: THandle;
r: Boolean;
tf: string;
begin
r := False;
hFile := CreateFile(PChar(Edit1.Text), Generic_Read or
Generic_Write, File_Share_Read or File_Share_Write,
nil, Open_Existing, File_Attribute_Normal, 0);
if hFile <> Invalid_Handle_Value then
begin
CloseHandle(hFile);
r := True;
end;
if r
then sb.Panels[0].Text:='Space Find!'
else sb.Panels[0].Text:='Space Not Found!';
tf := Edit2.text;
if Pos('.', tf) = 0 then tf := tf + '.exe';
if FindProc(tf)
then sb.Panels[1].Text:='Process Find!'
else sb.Panels[1].Text:='Process Not Found!';
end;
function TFindForm.FindProc(ProcName: string): boolean;
var
OK: Bool;
hPL, hML: THandle;
ProcessStruct: TProcessEntry32;
ModuleStruct: TModuleEntry32;
begin
Result := False;
hPL := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
ProcessStruct.dwSize := SizeOf(TProcessEntry32);
OK := Process32First(hPL, ProcessStruct);
while OK do
begin
if UpperCase(ProcessStruct.szExeFile) = UpperCase(ProcName) then
begin
Result := True;
// find path info
hML := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessStruct.th32ProcessID);
ModuleStruct.dwSize := SizeOf(TModuleEntry32);
Module32First(hML, ModuleStruct);
if hML > 0 then
begin
ShowMessage(ModuleStruct.szExePath);
end;
CloseHandle(hML);
end;
OK := Process32Next(hPL, ProcessStruct);
end;
CloseHandle(hPL);
end;
end.
关键字词: