Delphi 中实现判断某个外部程序是否运行(如果运行则执行一个命令否则执行一个命令)
2016-03-23 23:18
791 查看
前段时间在写一个工具型小软件时需要实现“在触发某个控件的一个事件时,判断某个外部程序(exe)是否已经运行,如果运行则将该程序主窗体打开或窗口置顶,如果没有运行,就通过一个自己指定的路径打开该应用程序”,虽然逻辑上看上去非常easy,但是本人确实没有写过,于是开始搜索资料,无奈很多资源都无法实现需求。。。so,自己动手,丰衣足食;
虽然耗时较长,还是整出来了,以下是通过函数在一个button事件中调用的。
//下行代码加入到pas文件代码起始处use中,使用 TLHelp32
单元
uses TLHelp32 //注意不要遗漏此项,省的多按一次run
//创建自定义函数(寻找进程)
function 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;
//例子 if FindProcess('soft.exe') then Showmessage('发现软件程序已运行,请在任务栏还原程序');
Ps:但是本人只实现了判断程序是否运行,如果运行的话就弹窗提示(因为确实不知道让所指定的exe主窗口打开或者置顶应该怎么写/实现),如果哪位仁兄知道方法,还请留言不吝赐教!
虽然耗时较长,还是整出来了,以下是通过函数在一个button事件中调用的。
//下行代码加入到pas文件代码起始处use中,使用 TLHelp32
单元
uses TLHelp32 //注意不要遗漏此项,省的多按一次run
//创建自定义函数(寻找进程)
function 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;
//例子 if FindProcess('soft.exe') then Showmessage('发现软件程序已运行,请在任务栏还原程序');
Ps:但是本人只实现了判断程序是否运行,如果运行的话就弹窗提示(因为确实不知道让所指定的exe主窗口打开或者置顶应该怎么写/实现),如果哪位仁兄知道方法,还请留言不吝赐教!
相关文章推荐
- Delphi Windows API判断文件共享锁定状态(使用OpenFile来判断)
- Delphi 中 FindWindow 和 FindWindowEx 找到外部进程,然后发送消息(比如最大化)
- move函数的用法
- Delphi调用CreateProcess创建进程
- How to allow new records to be inserted, but prevent existing data from being edited
- Delphi New,Getmem,ReallocMem联系与区别
- Delphi的内存分配和释放
- delphi 操作文件
- Delphi控件开发浅入深出(三)
- Delphi 资源文件( .res)
- delphi自定义颜色
- Delphi 记录类型- 结构指针
- delphi 字符串与内存流和文件的快速转换函数
- delphi Align属性
- 死亡历险,翻开新的一篇之Delphi 连接 JAVA WebService,并实现查找,添加,修改,删除等功能
- DELPHI学习---类和对象(五篇)
- Delphi 类与对象内存结构浅析(三篇)
- Delphi中类的运行期TypeInfo信息结构说明
- Delphi IOS环境安装
- DelphiXE7中创建WebService(服务端+客户端)