读书人

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

发布时间: 2013-01-23 10:44:49 作者: rapoo

限制重复执行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

读书人网 >VFP

热点推荐