查找一个特定的EXE是否在内存中运行
2008-05-01 00:01
204 查看
unit Find_Unit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, TLHelp32, ComCtrls;
type
TProcessInfo=Record
EXEFileName:String;
ProcessID:DWord;
end;
type
TFindForm = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
SB: TStatusBar;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
function findthread(threadname:string):boolean;
private
{ Private declarations }
public
{ Public declarations }
end;
var
FindForm: TFindForm;
implementation
{$R *.DFM}
procedure TFindForm.Button1Click(Sender: TObject);
var hfile:thandle; r:boolean; tf:string;
begin
r:=false; //查找空间变量是否存在 eg: in win2000 "cdrom0" is a space value
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 findthread(tf) then sb.Panels[1].Text:='Thread Find!' else sb.Panels[1].Text:='Thread Not Found!';
end;
function TFindForm.findthread(threadname: string): boolean;
var //关键的过程
p:TProcessInfo;
OK:Bool;
ProcessListHandle:THandle;
ProcessStruct:TProcessEntry32;
begin
result:=false;
ProcessListHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0);
ProcessStruct.dwSize:=SizeOf(ProcessStruct);
OK:=Process32First(ProcessListHandle,ProcessStruct);
while Integer(OK)<>0 do
begin
p.EXEFileName:=ProcessStruct.szEXEFile;
// p.ProcessID:=ProcessStruct.th32ProcessID;
OK:=Process32Next(ProcessListHandle,ProcessStruct);
if uppercase(p.EXEFileName)=uppercase(threadname) then begin result:=true; exit; end;
end;
closehandle(ProcessListHandle);
end;
end.
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, TLHelp32, ComCtrls;
type
TProcessInfo=Record
EXEFileName:String;
ProcessID:DWord;
end;
type
TFindForm = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
SB: TStatusBar;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
function findthread(threadname:string):boolean;
private
{ Private declarations }
public
{ Public declarations }
end;
var
FindForm: TFindForm;
implementation
{$R *.DFM}
procedure TFindForm.Button1Click(Sender: TObject);
var hfile:thandle; r:boolean; tf:string;
begin
r:=false; //查找空间变量是否存在 eg: in win2000 "cdrom0" is a space value
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 findthread(tf) then sb.Panels[1].Text:='Thread Find!' else sb.Panels[1].Text:='Thread Not Found!';
end;
function TFindForm.findthread(threadname: string): boolean;
var //关键的过程
p:TProcessInfo;
OK:Bool;
ProcessListHandle:THandle;
ProcessStruct:TProcessEntry32;
begin
result:=false;
ProcessListHandle:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0);
ProcessStruct.dwSize:=SizeOf(ProcessStruct);
OK:=Process32First(ProcessListHandle,ProcessStruct);
while Integer(OK)<>0 do
begin
p.EXEFileName:=ProcessStruct.szEXEFile;
// p.ProcessID:=ProcessStruct.th32ProcessID;
OK:=Process32Next(ProcessListHandle,ProcessStruct);
if uppercase(p.EXEFileName)=uppercase(threadname) then begin result:=true; exit; end;
end;
closehandle(ProcessListHandle);
end;
end.
相关文章推荐
- 查找一个特定的EXE是否在内存中运行
- 查找一个特定的EXE是否在内存中运行
- 运行一个EXE文件时,出现下面的文字,但程序能正常跑,请问怎么查找哪地方出现内存溢出?
- 编写查找一个单链表特定元素的程序。分别使用递归和非递归方法实现,并比较它们的运行时间。
- 查找exe同在一个文件夹下的Voices文件夹下的某个MP3是否存在
- python程序2(递归查找某一个文件夹下所有的文件是否含有某个特定的字符串,并打印该文件名)
- instanceof 算符是用来在运行时指出对象是否是特定类的一个实例
- 用心跳机制来监测一个activity 是否正常运行!
- Linux查找某些文件中是否含有特定字符串
- [置顶] 在字符串中查找一个特定的字符第一次出现的位置,并返回字符所在位置;如果没有则返回NULL。
- EXE只能运行一个...
- hs程序之启动(保证程序单实例、 程序自启动、判断程序是否有实例运行、查找对话框窗体)
- 如何在Outlook中查找并运行“收件箱修复工具”(Scanpst.exe)
- 在多线程中,A类有一个静态成员变量,如果A类在运行期间修改了它,B类是否能知道
- 在SQL Server中判断一个作业是否正在运行
- Android开发判断一个app应用是否在运行的方法详解
- VS自带的打包程序同时自动运行一个EXE或批处理命令
- SWF运行时判断两个DisplayObject是否同个类型,属于flash professional库中的同一个元件
- 从内存中加载并运行exe(两种方法)
- 一个简单java小程序打包成EXE运行文件