如何只让我的程序始终只作为一个进程运行(50分)

  • 主题发起人 主题发起人 agangr
  • 开始时间 开始时间
A

agangr

Unregistered / Unconfirmed
GUEST, unregistred user!
大家想必都有这种经验:
当点击一个mpg为扩展名的视频文件的时候,它就会被mdia player自动打开播放,
当我点击另外一个mpg扩展名的视频文件的时候,开始哪个就会停下,mdia player
自动打开播放当前的这个文件,而不会另外开启一个窗口来播放。
我也想达到这样的效果,应该怎么控制?
 
var
ZAppName: array[0..127] of char;
Hold: String;
Found: HWND;


Hold := Application.Title;
Application.Title := 'OnlyOne' + IntToStr(HInstance); // 暂时修改窗口标题
StrPCopy(ZAppName, Hold); // 原窗口标题
Found := FindWindow(nil, ZAppName); // 查找窗口
Application.Title := Hold; // 恢复窗口标题
if Found<>0 then
begin
// 若找到则激活已运行的程序并结束自身
ShowWindow(Found, SW_RESTORE);
Application.Terminate;
end
 
var
HMuTex:HWnd;
Ret:Integer;

{$R *.TLB}
{$R *.RES}

begin
//使程序只运行一次
HMuTex:=CreateMuTex(nil,false,Pchar(ExtractFilename(Application.ExeName)));
Ret:=GetLastError;
if Ret <> Error_Already_Exists
then
begin
Application.Initialize;
Application.CreateForm(TfrmJCYServerMain, frmJCYServerMain);
Application.Run;
end
else
ReleaseMuTex(HMuTex);
end.
 
问题是,用户点击某类文件并激活我的应用程序来打开,我的程序会对文件做
相应的处理,而不需要用户来干预,我原来处理这个文件的事件是放在FormCreate事件中的,
但是如果采用上面的方法,窗口只创建一次,这样,当用户点击了一个文件,再点
击另外一个文件,我的程序将无法处理,我该怎么办呢?
 
结束运行的程序先。
 
那么如何捕捉先前运行的程序的ID呢
 
后退
顶部