关于避免程序的重复运行及如何进行参数传递的问题。

yjbnew 2009-04-22 09:49:32
我做了个浏览器,是多页面的。
现在要实现的功能是:1避免两次运行,(这个比较好办)2 当我点击一个HTML文件或超链接时候,如何把这个链接传递个那个已经运行的程序,又能触发某个过程来打开页面呢?就象傲游一样。
谢谢。
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
stgsd 2009-04-22
  • 打赏
  • 举报
回复
要修改注册表的相关内容
Bear_hx 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jason_28693 的回复:]
避免多启动问题

// 互斥应用程序,只能运行一个程序
{$DEFINE MUTEX-APP}

{$IFDEF MUTEX-APP}
const
// {$I FRM_CMPCNT.INC}
MSG_RESTORE = WM_USER + 8000;
APP_CLASSNAME = 'BM-APP-CLASS';
{$ENDIF}

type
TFrBaseMain = class(TForm)
private
{ Private declarations }
{$IFDEF MUTEX-APP}
procedure FormRestore(var message: TMessage); message MSG_RESTORE; …
[/Quote]

这个正解
jason_28693 2009-04-22
  • 打赏
  • 举报
回复
避免多启动问题

// 互斥应用程序,只能运行一个程序
{$DEFINE MUTEX-APP}

{$IFDEF MUTEX-APP}
const
// {$I FRM_CMPCNT.INC}
MSG_RESTORE = WM_USER + 8000;
APP_CLASSNAME = 'BM-APP-CLASS';
{$ENDIF}

type
TFrBaseMain = class(TForm)
private
{ Private declarations }
{$IFDEF MUTEX-APP}
procedure FormRestore(var message: TMessage); message MSG_RESTORE;
{$ENDIF}
public
{ Public declarations }
{$IFDEF MUTEX-APP}
procedure CreateParams(var Params: TCreateParams); override;
{$ENDIF}
end;

var
FrBaseMain: TFrBaseMain;


implementation

{$R *.dfm}
{$IFDEF MUTEX-APP}
procedure TFrBaseMain.CreateParams(var Params: TCreateParams);
begin
inherited createparams(params);
Params.WinClassName := APP_CLASSNAME;
end;
{$ENDIF}

{$IFDEF MUTEX-APP}
procedure TFrBaseMain.FormRestore(var message: TMessage);
begin
if IsIconic(Application.Handle) = TRUE then
Application.Restore
else
Application.BringToFront;
end;
{$ENDIF}

{$IFDEF MUTEX-APP}
var
MutexHandle:Thandle;

//用互斥对象的方法控制应用程序只启动一个进程
procedure CreateMutexAPP(strAppClassName:string);
Var
RvHandle: hWnd;
begin
MutexHandle := CreateMutex(nil, TRUE, PAnsiChar(strAppClassName));
if MutexHandle <> 0 then
begin
if GetLastError = ERROR_ALREADY_EXISTS then
begin
releasemutex(Mutexhandle);
CloseHandle(MutexHandle);
RvHandle := FindWindow(PAnsiChar(strAppClassName),NIL);
if RvHandle > 0 then
begin
//showWarn(RvHandle,'不能在同一台计算机上同时运行多个程序!');
windows.MessageBox(RvHandle,
'不能在同一台计算机上同时运行多个程序!',
'警告!',
MB_OK+MB_ICONWARNING+MB_SYSTEMMODAL);
PostMessage(RvHandle,MSG_RESTORE,0,0);
end;
Halt;
end;
end;
end;

procedure CloseMutexAPP;
begin
if Mutexhandle=0 then exit;
releasemutex(Mutexhandle);
CloseHandle(MutexHandle);
end;

initialization
//用互斥对象的方法控制应用程序只启动一个进程
CreateMutexAPP(APP_CLASSNAME);
finalization
CloseMutexAPP

{$ENDIF}

end.



//===============================================
关联打开问题,自己的程序要判断EXE参数,
另外还要修改注册表
yjbnew 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mosaic 的回复:]
把html文件类型和这个应用关联
[/Quote]
已经关联了。
mosaic 2009-04-22
  • 打赏
  • 举报
回复
把html文件类型和这个应用关联
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

5,388

社区成员

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

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