| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 856 人关注过本帖
标题:请各位老师指点一下 怎么防止程序第二次运行
只看楼主 加入收藏
gzzytxy
Rank: 2
等 级:论坛游民
帖 子:77
专家分:16
注 册:2010-1-26
结帖率:69.7%
收藏
已结贴  问题点数:5 回复次数:10 
请各位老师指点一下 怎么防止程序第二次运行
请各位老师指点一下 怎么防止程序第二次运行
假如我有一个程序 txy.EXE(在本目录下) 现在已经运行了这个程序 如果再点这个程序 提示该程序已经运行 或 激活已打开的程序 请代码 谢谢

[ 本帖最后由 gzzytxy 于 2012-12-12 09:20 编辑 ]
搜索更多相关主题的帖子: 老师 
2012-12-12 09:19
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:1 
可以用API函数来实现。
程序代码:
DECLARE INTEGER FindWindow IN USER32.DLL STRING lpClassName,STRING lpWindowName
lpwindowname="拍拍贷辅助分析系统"&&&这里是你自己的窗口标题
hwnd1=findwindow(0,lpwindowname)
IF .NOT. hwnd1==0 &&寻找窗口标题
****下面两种办法,只需要一种即可
    MESSAGEBOX("拍拍贷辅助分析系统已在运行!!",64,"提醒")&&办法一,提示
    DECLARE INTEGER SetForegroundWindow IN user32 INTEGER HWND&&办法二,激活已打开的窗口
    =setforegroundwindow(hwnd1)
    QUIT
ENDIF
_SCREEN.CAPTION=lpwindowname&&窗口标题


[ 本帖最后由 月沐庭轩 于 2012-12-12 20:09 编辑 ]

坚持学习vfp,QQ:306805680
2012-12-12 11:29
gzzytxy
Rank: 2
等 级:论坛游民
帖 子:77
专家分:16
注 册:2010-1-26
收藏
得分:0 
谢谢老师
2012-12-12 13:04
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:1 
另一个方法也行:(TongDeng 版主的早先建议 )程序一开始就自动创建一个空表文件,再运行哪段程序时,表里增添一条记录。运行完毕后删除该记录。运行该段程序前,先检查该记录的存在,作出相应处理。此法的好处是,可以同时检测多个程序的运行。使用于多界面的操作。如果程序运行中发生意外中断,退出程序,(注意:退出时,要将全部运行的各个exe 等全部杀灭).重新进入,系统会自动创建一个新的空表,不影响程序正常使用。
2012-12-12 17:56
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
2楼代码有点问题,已修改。

坚持学习vfp,QQ:306805680
2012-12-12 20:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
记忆启动本机的IP,也是一个办法。

授人以渔,不授人以鱼。
2012-12-13 00:02
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:1 
以前用过的一段
根据进程来判断
运行第二次的时候提示

放在主程序中
程序代码:
Clear
Declare integer CreateToolhelp32Snapshot in win32api integer,integer
Declare integer Process32First in win32api integer,string @
Declare integer Process32Next in win32api integer,string @
Declare integer CloseHandle in win32api integer

lnHand = 0
lnHand = CreateToolhelp32Snapshot(3,0)
If lnHand>0
    lctitle=Space(256)
    If Process32First(lnHand,@lctitle) > 0
        tln = 0
        Do while Process32Next(lnHand,@lctitle)> 0
            m.lnval=Substr(lctitle,37,256)
            m.lnval=Left(m.lnval,At(Chr(0),m.lnval) - 1)
            If Lower(m.lnval) == 'txy.exe'
                tln = tln + 1
                If tln == 2
                    Exit
                Endif
            Endif
        Enddo
        If tln == 2
            Messagebox("txy进程正在运行",4096,"Message")
        Endif
    Endif
    CloseHandle(lnHand)
    Clear Dlls
Endif



个性太多,无法显示
2012-12-13 11:51
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
收藏
得分:0 
随便建立一个文件
保存程序启动次数
也是一般办法

个性太多,无法显示
2012-12-13 11:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如何防止第二次启动,其实无法一概而论的。检测进程法,依赖于进程的名称,他要把程序复制一份改个名字,你就失效了。又或者你的程序依赖检测文件,但没有特定的目录,那么也可以通过改变路径来令你失效。诸如在多机网络环境,更要考虑别的办法。总之,需要根据实际情况来定的,特别是如何界定属于第二次启动。

授人以渔,不授人以鱼。
2012-12-13 14:29
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:1 
通常是防止程序二次启动重复打开同一数据库而造成运行错误,至于不让用户复制软件来使用,应该属于注册机制的范畴吧。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-12-13 22:11
快速回复:请各位老师指点一下 怎么防止程序第二次运行
数据加载中...
 
   



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

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