| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 931 人关注过本帖
标题:顶层表单做软件主界面的exe如何防止软件重复运行
只看楼主 加入收藏
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:295
专家分:38
注 册:2010-12-23
结帖率:58.02%
收藏
已结贴  问题点数:20 回复次数:8 
顶层表单做软件主界面的exe如何防止软件重复运行
请教:顶层表单做软件主界面的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
搜索更多相关主题的帖子: 重复运行 防止 软件 表单 界面 
2021-11-12 13:31
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:7 
程序代码:
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

2021-11-12 14:12
cjc1010
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:65
专家分:195
注 册:2006-4-16
收藏
得分:7 
重复运行时直接把界面正常化更好。
2021-11-12 15:46
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:295
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 2楼 吹水佬
大佬,用你的代码还是可以重复启动 ( 我的是win10系统
2021-11-12 22:55
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用laibinhua在2021-11-12 22:55:14的发言:

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

编译成EXE
2021-11-13 04:31
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:295
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 5楼 吹水佬
是EXE文件
图片附件: 游客没有浏览图片的权限,请 登录注册
2021-11-13 13:45
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 6楼 laibinhua
那时看到有两个进程正常
一个是“正常启动运行”,另一个是“不能重复运行”
“不能重复运行”的进程下一步就是关闭退出了
图片附件: 游客没有浏览图片的权限,请 登录注册

2021-11-13 14:47
laibinhua
Rank: 2
等 级:论坛游民
威 望:1
帖 子:295
专家分:38
注 册:2010-12-23
收藏
得分:0 
回复 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)
2021-11-13 15:10
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:789
专家分:1165
注 册:2021-10-13
收藏
得分:7 
你可以参考我这个代码:

DECLARE integer FindWindow IN WIN32API string lpclassname,string lpwindowname
lpwindowname='Ewave 跟单管理系统'
IF NOT findwindow(0,lpwindowname)==0
    =MESSAGEBOX('程序已经运行了!',48,'Ewave 跟单管理系统')
    QUIT
ENDIF
2021-11-13 15:21
快速回复:顶层表单做软件主界面的exe如何防止软件重复运行
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051548 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved