当前位置: 代码迷 >> VFP >> 限制重复执行EXE文件的有关问题
  详细解决方案

限制重复执行EXE文件的有关问题

热度:3915   发布时间:2013-02-26 00:00:00.0
限制重复执行EXE文件的问题
我编译了一个‘区域薪资管理系统’的EXE文件,
奇怪了,为什么下面程序加入后,仍可以重复执行‘区域薪资管理系统‘?

cCaption="区域薪资管理系统"
DECLARE INTEGER FindWindow IN win32api STRING cClass,STRING cCaption
IF FindWindow(0,cCaption)#0
 _SCREEN.CAPTION=cCaption
 =MESSAGEBOX("区域薪资管理系统 程序已经运行,请注意任务栏!",16,"提示")
 QUIT
RETURN .F.
ENDIF

------解决方案--------------------------------------------------------
把此段代码加到你主程序的开头:
Declare Integer CreateMutex In kernel32 Integer lpMutexAttributes,Integer bInitialOwner,String lpName
Declare Integer CloseHandle In kernel32 Integer hObject
Declare Integer GetLastError In kernel32
Public gnMainObjectHWnd
lnLastError=GetLastError()
lcNameID="区域薪资管理系统" && 要激活的窗口 Caption 与此值要相同
gnMainObjectHWnd=CreateMutex(0,0,lcNameID)
lnLastError=GetLastError()
If gnMainObjectHWnd=0 Or lnLastError<>0 && 表明已经创建过
=CloseHandle(gnMainObjectHWnd)
Messagebox(lcNameID+Space(1)+"已经运行!"+Space(5),48,"信息提示")
Declare Integer FindWindow In WIN32API String lpClassName,String lpWindowName
lnOldHWnd=FindWindow(0,lcNameID)
If lnOldHWnd<>0
Declare Integer ShowWindow In WIN32API Integer HWnd,Integer nCmdShow
Declare Integer SetForegroundWindow In WIN32API Integer HWnd
=ShowWindow(lnOldHWnd,1)
=SetForegroundWindow(lnOldHWnd)
Endif
Clear Dlls
*Cancel
Quit
Endif
Clear Dlls
  相关解决方案