我编了个关联exe文件的程序,但不知道怎么退出windows
每当运行一个exe文件,我的程序就会运行,于是找到一篇
防止一个程序二次运行的文章,并严格照做,结果——程序一次
也不运行了
总结一下,两问:1。怎么让监控程序关联exe文件后能正常退出windows??
2。怎样让一个程序只运行一次,而且能运行一次
请各位高手帮忙!!谢谢了!!!!
每当运行一个exe文件,我的程序就会运行,于是找到一篇
防止一个程序二次运行的文章,并严格照做,结果——程序一次
也不运行了
总结一下,两问:1。怎么让监控程序关联exe文件后能正常退出windows??
2。怎样让一个程序只运行一次,而且能运行一次
请各位高手帮忙!!谢谢了!!!!
解决方案 »
- paradox数据库如何动态增加字段,并设为主键
- mediaplay循环播放
- 请问大家下怎么用delphi 获取窗体内部坐标例子
- 如何实现禁止可执行文件exe文件的复制。?急救?
- 学delphi是否的有pascal语言基础
- 得分了!listbox
- 菜鸟问题!
- 如何在DELPHI中,对EXECL加入文字和图片。
- 如何查看控件的源代码?
- 关于数据流的问题
- ADOConnection中对于运用ADOQuery怎么样才能实现添加和修改功能!~
- 我把delphi7下哪个让窗口xp的xpman.pas给安装到了delphi6中,单一的程序实现了xp风格,但是调用含窗口的dll,就没有了xp风格,为何???急
方法:
procedure LookForPreviousInstance;
var
PreviousInstanceWindow : hWnd;
AppName : array[0..30] of char;
FoundAtom : TAtom;
begin
AtomText:='OnlyOne'+Application.title;
FoundAtom := GlobalFindAtom(PChar(AtomText));
if FoundAtom <> 0 then
begin
ShowMessage('该程序已经远行了!');
StrFmt(AppName,'%s', [Application.Title]);
Application.ShowMainForm := false;
Application.Title := 'destroy me';
PreviousInstanceWindow := FindWindow(nil,AppName);
Application.Terminate; if PreviousInstanceWindow <> 0 then
if IsIconic(PreviousInstanceWindow) then
ShowWindow(PreviousInstanceWindow,SW_RESTORE)
else SetForegroundWindow(PreviousInstanceWindow);
end;
FoundAtom := GlobalAddAtom(PChar(AtomText));
end;procedure TForm1.FormCreate(Sender: TObject);
begin
inherited;
LookForPreviousInstance;
end;procedure TForm1.FormDestroy(Sender: TObject);
var
FoundAtom : TAtom;
ValueReturned : word;
begin
FoundAtom := GlobalFindAtom(Pchar(AtomText));
if FoundAtom <> 0 then ValueReturned := GlobalDeleteAtom(FoundAtom);
// inherited Destroy;
end;
方法二:
procedure TForm1.FormCreate(Sender: TObject);
begin
if GlobalFindAtom('PROGRAM_RUNNING') = 0 then
fAtom := GlobalAddAtom('PROGRAM_RUNNING')
else
begin
ShowMessage('该程序已经运行了!');
Halt;
end;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
GlobalDeleteAtom(fAtom);
end;
方法三:
initialization
Project:='RunOnlyOnce_MyProject';
mHandle:=CreateMutex(nil,True,PChar(Project));
if GetLastError=ERROR_ALREADY_EXISTS then
begin
ShowMessage('该程序已经运行了!');
AppName:=Application.Title;
Application.ShowMainForm:=False;
Application.Title:='destroy me';
PreviousInstanceWindow:=FindWindow(nil,PChar(AppName));
if PreviousInstanceWindow<>0 then
if IsIconic(PreviousInstanceWindow) then
ShowWindow(PreviousInstanceWindow,SW_RESTORE)
else
SetForegroundWindow(PreviousInstanceWindow);
Application.Terminate;
end;
finalization
if mHandle<>0 then
CloseHandle(mHandle);
请问这是什么原因??
另外,方法三的代码是加在哪?.dpr内吗?
方法一还没来得及试,要下班了
明天来看你们的好消息
在次先谢谢了!!!
次也不运行,而加上那句后,又可运行,反复试了几次都这样,简直像是天方夜谭,可偏偏发生了
郁闷的是在实际使用中,不可能保留那句的
请各位高手指点一下!!在次先谢过了!!