文件关联问题,40分

benbenfei 2001-10-04 06:02:20
我的程序可以打开一种特定类型的文件,当点击这种文件时,会自动打开我的程序,并装入这个文件运行。这些都没问题,但是如果我同时选定了多个文件,这是时候出现的情况是,我的程序也相应的执行了多次。怎样实现选取多个文件时,运行一个程序,并且程序记录这些文件地址,然后从第一个文件开始操作。

希望能给出一段代码,可以要求加分
...全文
133 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
benbenfei 2001-10-05
  • 打赏
  • 举报
回复
提前一下,还有人说说吗?
csdn72 2001-10-05
  • 打赏
  • 举报
回复
参考下面一段程序
program project1;

uses
Forms,
windows,
.....

{$R *.RES}

begin
CreateMutex(Nil,false,'project1');
if GetLastError = ERROR_ALREADY_EXISTS then
begin
if Application.MessageBox('程序project1正在运行,是否再另外打开一个?','project1',4)=IDNO then
begin
SendMessage(HWND_BROADCAST,RegisterWindowMessage('eExs'),0,0);
Halt(0);
end;
end;
Application.Initialize;
Application.CreateForm(Tfrmmain, frmmain);
Application.Run;
end.

这样可以让用户自己决定是否再运行一次本程序。
torble 2001-10-05
  • 打赏
  • 举报
回复
用原子(Atom):

procedure CheckPrevInstance;
var
PrevWindow: HWND;
i: Integer;
Atom: TAtom;
begin
if GlobalFindAtom(PChar('APPLICATION_IS_RUNNING')) = 0 then
begin
CheckPreInsAtom := GlobalAddAtom(PChar('APPLICATION_IS_RUNNING'));
end else
begin
repeat
PrevWindow := FindWindow('MAINFORM_CLASS', nil);
until PrevWindow <> 0;
for i := 1 to ParamCount do
begin
Atom := GlobalAddAtom(PChar(ParamStr(i)));
SendMessage(PrevWindow, WM_XXXX, Atom, 0); // 通知消息
GlobalDeleteAtom(Atom);
end;
SetForeGroundWindow(PrevWindow);
SendMessage(PrevWindow, WM_XXXX, 0, 0); // 通知消息
Halt;
end;
end;

APPLICATION_IS_RUNNING 是应用程序运行标志
MAINFORM_CLASS 是主窗口类名
WM_XXXX 是发送给应用程序的消息,起到通知的作用

以上在 Application.Initialize 前调用
benbenfei 2001-10-04
  • 打赏
  • 举报
回复
to: sundayboys(sunboy) 谢谢,我下线试一下,不行再来问你。现在我还不想结束贴子,看看还有没有人回复,我会给分的。
sundayboys 2001-10-04
  • 打赏
  • 举报
回复
用互拆来保证程序只运行一次,这个可以看以前的帖子,很多的。
当发现已经运行,然后FindWindowsEx找那个窗口的句柄,找到后PostMessage(runingHandle,OPEN_NEW_FILE,Nil,Nil),这个OPEN_NEW_FILE是自己定义的消息,然后你在程序里边处理这个自定义消息就行了。
文件的路径可以从commandline中获取。
benbenfei 2001-10-04
  • 打赏
  • 举报
回复
to: sundayboys(sunboy) 好办法,但是两个实例之间怎么传消息?
benbenfei 2001-10-04
  • 打赏
  • 举报
回复
具体点吗?
sundayboys 2001-10-04
  • 打赏
  • 举报
回复
你的程序加入代码,让程序只运行一次,以后发现有程序运行就发送消息就行了,然后在消息里边处理一下。
dyny 2001-10-04
  • 打赏
  • 举报
回复
检查paramstr
dyny 2001-10-04
  • 打赏
  • 举报
回复
gz

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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