如何判断一个程序是否启动(30分)

  • 主题发起人 主题发起人 wei0916
  • 开始时间 开始时间
W

wei0916

Unregistered / Unconfirmed
GUEST, unregistred user!
想在启动一个程序时也启动另一个程序,但想知道另一个程序是否启动(知道程序名为ABC.exe),用FINWINDOW的方法不可靠,因为有ABC.exe几个界面切换;
请问有什么好方法.
 
找进程?
 
这个我写过.有原码~~.不过你最好自己写.
这里给你两种方法:
<1>枚举所的进程,取进程的id
<2>有findwindow这个API
比如:你要判断'计算器'是否运行.你可以这样写:
procedure TForm1.Button1Click(Sender: TObject);
var
handle :THandle;
begin
handle :=FindWindow(nil,'计算器');
if handle <> 0 then
begin
ShowMessage('该程序已经运行');
end
else ShowMessage('找不该程序');
end;
不过最好是用枚举进程更通用一些.这里代码就不给出来了.写程序的不人不能老是向别人要代码.给出思路你在网应该查得到的.
哈哈~~下面就给我加分吧
 
function TForm1.FindProcess(AFileName: string): boolean;
var
hSnapshot: THandle;//用于获得进程列表
lppe: TProcessEntry32;//用于查找进程
Found: Boolean;//用于判断进程遍历是否完成
begin
Result :=False;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统进程列表
lppe.dwSize := SizeOf(TProcessEntry32);//在调用Process32First API之前,需要初始化lppe记录的大小
Found := Process32First(hSnapshot, lppe);//将进程列表的第一个进程信息读入ppe记录中
while Found do
begin
if ((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AFileName)) or (UpperCase(lppe.szExeFile )=UpperCase(AFileName))) then
begin
Result :=True;
end;
Found := Process32Next(hSnapshot, lppe);//将进程列表的下一个进程信息读入lppe记录中
end;
end;
 
uses TLHELP32
 
谢谢:迷途的羔羊
 
多人接受答案了。
 
后退
顶部