| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1451 人关注过本帖
标题:如何控制可执行文件不被重复打开
只看楼主 加入收藏
zhonglong
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-6-3
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:12 
如何控制可执行文件不被重复打开
我用VFP设计了一个小程序,并将其编译成可执行文件。双击这个可执行文件,运行正常。我希望再次双击它时,它不再运行,但能最大化先打开的这个运行窗口。
搜索更多相关主题的帖子: 如何 执行文件 
2015-06-03 21:22
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:680
专家分:1287
注 册:2009-3-1
收藏
得分:4 
这个问题N年前这个论坛上就有过的——印象中的事
2015-06-03 21:26
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11785
专家分:43421
注 册:2006-5-13
收藏
得分:4 
搜索一下,保准一大把。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-06-03 21:28
w2009w
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:190
专家分:542
注 册:2015-4-20
收藏
得分:4 
不要这么无聊好不好,貌似没有什么用!
2015-06-03 21:30
muyubo
Rank: 9Rank: 9Rank: 9
来 自:山东莱芜
等 级:蜘蛛侠
威 望:3
帖 子:471
专家分:1017
注 册:2011-3-6
收藏
得分:4 
回复 楼主 zhonglong
程序代码:
PUBL gcOldDir,vcxname

gcOldDir = SET('DEFAULT') + SYS(2003)
SET DEFA TO "&gcOldDir"
******************************************************************************
&&获取程序运行名称
Declare INTEGER GetModuleHandle IN kernel32 INTEGER lpModuleName
vcxid = ALLTRIM(STR(GetModuleHandle(0)))

Declare INTEGER GetModuleFileName IN kernel32;
INTEGER hModule,;
STRING @ lpFilename,;
INTEGER nSize

lpFilename = SPACE(250)
lnLen = GetModuleFileName (0, @lpFilename, Len(lpFilename))
vcxname = JUSTFNAME(ALLTRIM(Left (lpFilename, lnLen)))
******************************************************************************
#DEFINE ERROR_ALREADY_EXISTS 183 
DECLARE INTEGER GetLastError IN WIN32API
DECLARE INTEGER CreateMutex IN WIN32API INTEGER Security,;
SHORT Owned,;
STRING@ MutexName
DECLARE SHORT CloseHandle IN WIN32API INTEGER

PUBLIC hMutex, iResult, bCanRun
hMetux=CreateMutex(0,0,vcxname)
iResult=GetLastError()
DO CASE 
CASE iResult==0
bCanRun=.T.
CASE iResult==ERROR_ALREADY_EXISTS
MessageBox("程序已经运行。"+SPACE(2),64,"提示")
bCanRun=.F.
OTHERWISE 
bCanRun=.F.
MessageBox("GetLastError() returned "+ ltrim(str(iResult))) 
ENDCASE 

IF bCanRun ==.F.
=CloseHandle(hMutex)
QUIT
ENDIF
2015-06-03 21:37
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:680
专家分:1287
注 册:2009-3-1
收藏
得分:0 
2015-06-03 21:40
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10552
专家分:42996
注 册:2014-5-20
收藏
得分:4 
1、用VFP自身功能,因重复打开独占表会引发异常,可用独占打开表并通过VFP出错处理过程来判断是否重复运行。
2、API CreateMutex() 防止程序重复运行.
   示例:
程序代码:
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
2015-06-03 23:40
muyubo
Rank: 9Rank: 9Rank: 9
来 自:山东莱芜
等 级:蜘蛛侠
威 望:3
帖 子:471
专家分:1017
注 册:2011-3-6
收藏
得分:0 
回复 楼主 zhonglong
在发表文章处,当打上关键词,下面就会出来已有的文章,可以点开浏览.
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 muyubo 于 2015-6-4 06:37 编辑 ]
2015-06-04 06:34
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11785
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用w2009w在2015-6-3 21:30:59的发言:

不要这么无聊好不好,貌似没有什么用!

已有成熟的技术,借鉴一下应该不是件坏事吧?

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-06-04 07:07
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11785
专家分:43421
注 册:2006-5-13
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

在这里搜索效果可能会更好些。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2015-06-04 07:09
快速回复:如何控制可执行文件不被重复打开
数据加载中...
 
   



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

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