您的位置:程序门 -> vb -> 基础类



怎样限制一个exe只能打开一次?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


怎样限制一个exe只能打开一次?[已结贴,结贴人:netwy]
发表于:2007-06-06 11:43:26 楼主
怎样限制一个exe只能打开一次?
发表于:2007-06-06 11:49:181楼 得分:0
那个exe是你自己写的么?
发表于:2007-06-06 14:22:452楼 得分:10
if   app.previnstance   then
        msgbox   "程序已经运行,不能再次装载。 ",   vbexclamation   +   vbokonly,   "系统消息 "
        unload   me
        exit   sub
end   if
发表于:2007-06-06 15:39:453楼 得分:0
app.previnstance
发表于:2007-06-06 15:39:584楼 得分:0
或者使用信号量
发表于:2007-06-06 16:13:465楼 得分:0
上面的一个错了应该用end结束进程,不能只结束过程
if   app.previnstance   then
        msgbox   "程序已经运行,不能再次装载。 ",   vbexclamation   +   vbokonly,   "系统消息 "
        unload   me
        end   '
end   if
发表于:2007-06-06 16:46:486楼 得分:0
if   app.previnstance   then
        msgbox   "程序已经运行,不能再次装载。 ",   vbexclamation   +   vbokonly,   "系统消息 "
        unload   me
        end   '
end   if
发表于:2007-06-06 16:59:237楼 得分:0
程序启动关闭时可以往文本文件里写个标记,
每次启动程序先判断一下这个标记
发表于:2007-06-06 19:09:048楼 得分:10
if   app.previnstance   then
        msgbox   "程序已经运行,不能再次装载。 ",   vbexclamation   +   vbokonly,   "系统消息 "
        unload   me
        end   '
end   if

以上确实可以,不过如果同一个exe文件在两个目录下都有,以上方法就不行了。
更彻底的方法:用api函数遍历当然所有窗体,然后判断是否已经打开:

'在模块里添加如下代码
public   declare   function   enumwindows&   lib   "user32 "   (byval   lpenumfunc   as   long,   byval   lparam   as   long)
public   declare   function   getwindowtext   lib   "user32 "   alias   "getwindowtexta "   (byval   hwnd   as   long,   byval   lpstring   as   string,   byval   cch   as   long)   as   long
public   function   enumrunonce(byval   app_hwnd   as   long,   byval   lparam   as   long)   as   boolean   '遍查主窗口,使用程序只运行一次
      dim   buf   as   string   *   1024
      dim   length   as   long
      dim   title   as   string
      length   =   getwindowtext(app_hwnd,   buf,   len(buf))
      title   =   left$(buf,   length)
      if   instr(title,   form1.caption)   then     '判断是否为执行你想要的操作,form1是主窗体,标题起的尽可能不会重复
            if   app_hwnd   <>   form1.hwnd   then     '程序同时只能打开一次
                  end
            end   if
      end   if
      enumrunonce   =   1
end   function

'在主窗体中中添加如下代码:
private   sub   form_load()
      enumwindows   addressof   enumrunonce,   0& '限定只能运行一次
end   sub
发表于:2007-06-06 20:05:109楼 得分:0
楼上说的也不是彻底的方法,我觉得没有百分之百的彻底的方法
但是如果楼主使用下面的方法可能好些
遍历进程获取crc码这样可以保证唯一
发表于:2007-06-06 22:20:3810楼 得分:0
crc?
那如果偶成心修改中间一个无关字节呢。
你还是不是要判断相似率呢?^_^
路过玩笑
发表于:2007-06-06 23:21:4311楼 得分:0
呵呵,有意思!

没什么程序,这么重要的吧?

研究研究...
发表于:2007-06-07 00:06:2212楼 得分:0
我现在的做法是:

一,建立一个互斥体.成功转三,失败转二.
二,广播自定义消息,并退出.
三,注册一个自定义消息
四,子类化,监视自定义消息
启动完成.


快速检索

最新资讯
热门点击