注册 登录
编程论坛 VFP论坛

顶层表单做软件主界面的exe如何防止软件重复运行

laibinhua 发布于 2021-11-12 13:31, 1079 次点击
请教:顶层表单做软件主界面的exe如何防止软件重复运行,之前因为不是用顶层表单做主界面可以用下面的方法实现:
*-- 设置软件唯一运行模式
    SET LIBRARY TO mypath+"\ocx\foxtools.fll" ADDITIVE
    LOCAL getwind
    GetWind = RegFn("FindWindow", "CC", "I")
    wclass=0
    winname="『测试软件』"
    apphand=CallFn(GetWind,wclass ,winname)
    IF apphand<>0  &&如果找到窗口,停止运行
       =MESSAGEBOX("软件已在运行中,不能重复运行!"+CHR(13)+CHR(13)+"很有可能你已将程序最小化了!"+CHR(13);
       +"在最下面的状态栏点它下就可以了!",64,"提示信息")
       QUIT
    ENDIF
8 回复
#2
吹水佬2021-11-12 14:12
程序代码:
DECLARE LONG CreateMutex  IN Kernel32 STRING@, LONG, STRING@
DECLARE LONG GetLastError IN Kernel32
DECLARE LONG CloseHandle  IN Kernel32 LONG

szPrg  = PROGRAM()
hMutex = CreateMutex(NULL, 0, @szPrg)

IF GetLastError() != 183    && ERROR_ALREADY_EXISTS
    MESSAGEBOX(szPrg + " 正常启动运行")
ELSE
    MESSAGEBOX(szPrg + " 不能重复运行")
ENDIF

CloseHandle(hMutex)
CLEAR DLLS
RETURN

#3
cjc10102021-11-12 15:46
重复运行时直接把界面正常化更好。
#4
laibinhua2021-11-12 22:55
回复 2楼 吹水佬
大佬,用你的代码还是可以重复启动 ( 我的是win10系统
#5
吹水佬2021-11-13 04:31
以下是引用laibinhua在2021-11-12 22:55:14的发言:

大佬,用你的代码还是可以重复启动 ( 我的是win10系统

编译成EXE
#6
laibinhua2021-11-13 13:45
回复 5楼 吹水佬
是EXE文件
只有本站会员才能查看附件,请 登录
#7
吹水佬2021-11-13 14:47
回复 6楼 laibinhua
那时看到有两个进程正常
一个是“正常启动运行”,另一个是“不能重复运行”
“不能重复运行”的进程下一步就是关闭退出了
只有本站会员才能查看附件,请 登录

#8
laibinhua2021-11-13 15:10
回复 7楼 吹水佬
我用了这句 没有出来提示 MESSAGEBOX 直接同时打开两个来了,怪地,我再试试
*-- 设置软件唯一运行模式
DECLARE LONG CreateMutex  IN Kernel32 STRING@, LONG, STRING@
DECLARE LONG GetLastError IN Kernel32
DECLARE LONG CloseHandle  IN Kernel32 LONG

szPrg  = PROGRAM()
hMutex = CreateMutex(NULL, 0, @szPrg)

IF GetLastError() = 183    && ERROR_ALREADY_EXISTS
    MESSAGEBOX(szPrg + " 不能重复运行")
    QUIT
ENDIF

CloseHandle(hMutex)
#9
sam_jiang2021-11-13 15:21
你可以参考我这个代码:

DECLARE integer FindWindow IN WIN32API string lpclassname,string lpwindowname
lpwindowname='Ewave 跟单管理系统'
IF NOT findwindow(0,lpwindowname)==0
    =MESSAGEBOX('程序已经运行了!',48,'Ewave 跟单管理系统')
    QUIT
ENDIF
1