delphi如何判断一个exe文件是否已经运行

zhaofq790621 2007-06-27 03:06:47
比如只给出一个exe文件名称main.exe,在另外的一个程序里如何判断该main.exe是否已经执行,如果没执行,则执行,在线等带,解决马上给分
...全文
887 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaofq790621 2007-06-27
  • 打赏
  • 举报
回复
谢谢各位,刚才结贴了出错了,可是分好象看不到啊
s2401056 2007-06-27
  • 打赏
  • 举报
回复
这样就可以了
var
hMutex: THandle;

begin
hMutex := CreateMutex(nil, True, 'main');
try
if not (ERROR_ALREADY_EXISTS = GetLastError()) then
begin
Application.Initialize;
Application.Title := 'main';
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end
else
begin
Application.MessageBox('main 已经在运行中!',PChar(Application.Title), MB_OK + MB_ICONERROR);
end;
finally
ReleaseMutex(hMutex);
end;
end.
mdejtod 2007-06-27
  • 打赏
  • 举报
回复
ShellExecute(Handle, nil,PChar(ChangeFileExt(TextFilePath,'.bat')), nil, nil, SW_hide);

第三个参数为你要运行的可执行文件
zhaofq790621 2007-06-27
  • 打赏
  • 举报
回复
谢谢hongqi162(失踪的月亮),如果没执行,如何根据这个名称让他执行啊,
hongqi162 2007-06-27
  • 打赏
  • 举报
回复
procedure TForm1.Button2Click(Sender: TObject);
Function IsRun( ProcName:string ):Boolean
var
hSnapshot: THandle;
lppe: TProcessEntry32;
Found: Boolean;
begin
Result:=True;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
lppe.dwSize := SizeOf(TProcessEntry32);
Found := Process32First(hSnapshot, lppe);
while Found do
begin
if ((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(ProcName)) or (UpperCase(lppe.szExeFile )=UpperCase(ProcName))) then
begin
Result:=True;
end
Found := Process32Next(hSnapshot, lppe);
end;
end;
if Not IsRun( 'main.exe' ) then
begin
WinExec('C:\main.exe',SW_SHOWNORMAL);
end;
end;
s2401056 2007-06-27
  • 打赏
  • 举报
回复
在(dpr)工程文件里编写如下代码:
var
hMutex: THandle;
begin
hMutex := CreateMutex(nil, True, 'main');
try
if not (ERROR_ALREADY_EXISTS <> GetLastError()) then
begin
Application.MessageBox('main 已经在运行中!',
PChar(Application.Title), MB_OK + MB_ICONERROR);
end;
finally
ReleaseMutex(hMutex);
end;
end.
dennyshao 2007-06-27
  • 打赏
  • 举报
回复
通过获取句柄就可以了
hongqi162 2007-06-27
  • 打赏
  • 举报
回复
var
hSnapshot: THandle;
lppe: TProcessEntry32;
Found: Boolean;
begin
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
lppe.dwSize := SizeOf(TProcessEntry32);
Found := Process32First(hSnapshot, lppe);
while Found do
begin
if ((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase('main.exe')) or (UpperCase(lppe.szExeFile )=UpperCase('main.exe'))) then
begin
//
showmessage('程序正在运行');
end;
Found := Process32Next(hSnapshot, lppe);
end;
end;
Windows中的通用应用程序的类名 使用API函数复制移动文件 使用API访问ListBox项 使用GetTempFileName创建一个唯一的临时文件 使用INI文件 使用INI文件保存、装载字体信息 使用TFileStream 使用TStream保存字符串 使用TTreeview显示目录 使窗体的关闭按钮失效 修改文本文件 允许在资源管理器中拖放文件 减小EXE文件大小 列举驱动器 列出目录下的子目录 创建快捷方式 创建目录 删除文件到回收站 判断文件是否共享 剪贴板存放多个控件流 加载CDROM图标 压缩和解压流 取MP3的ID3-Tag 取Program files目录 取可执行文件类型 取和文件类型关联的应用程序 取当前程序所在目录 取指定文件的版本信息 取文件修改日期 取文件日期 取文件最后访问日期 取文件版本号 取文件的所有者 取目录大小 取磁盘可用空间和总空间 取设置当前目录 取设置文件夹的日期 向Exe文件中添加数据 向文件写添加文本 在TMemo光标位置插入一个文件 在Windows开始后自动运行一个程序 在应用程序中添加Exe文件并且执行 在文件中搜索字符串 在文件中搜索指定文本 在文本文件中搜索文本 将剪贴板复制到流和恢复 将文本文件赋值给一个字符串 将资源文件中Rft文本装载到TRichEdit 将长文件名转换成短文件名 彻底删除文件 打开资源管理器且显示指定文件夹 捕获DOS应用程序的输出 改变TPageControls的颜色 改名、移动、删除文件或目录 显示‘打开方式’对话框 显示文件属性对话框 显示目录选择对话框 显示目录选择对话框并指定初始目录 替换正运行的DLL 检查文件是否ASCII格式 检查文件是否在本地驱动器 检查文件是否已打开 检查文件是否正在使用 检查目录是否存在 比较两个文件是否相同 添加去掉路径名后的符号 添加文件到文档菜单 清空文档 获取文件类型 获得快捷方式信息 获得文件大小 计算文件的校验和 设置文件日期 读 table-textfile 到 StringGrid 读取二进制文件使用ASCII显示 转换OEM到ANSI 转换短文件名为长文件运行一个程序或打开一个关联文件 返回UNC路径 通过CRC-32验证文件

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧