【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

怎样让VB6程序只能运行一次

原创 2013年12月05日 17:02:54
方法一:利用PrevInstance属性
If App.PrevInstance Then
Call MsgBox("对不起本程序已在运行中, 不得重复加载!!", vbCritical)
End
End If
优点:简单方便、
缺点:针对性不强、随意复制一份即可再次运行、



方法二:创建互斥体(个人比较喜欢)
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (ByVal lpMutexAttributes As Long, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Private Declare Function ReleaseMutex Lib "kernel32" (ByVal hMutex As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Dim ret As Long
Private Sub Form_Load()
ret = CreateMutex(ByVal 0, 1, "FORM1") '这里改成程序的标题
If Err.LastDllError = 183 Then
   ReleaseMutex ret
   CloseHandle ret
   MsgBox "程序只能运行一次!", vbCritical, ""
   End
End If
End Sub
优点:只要窗体的标题不变,无论如何无法双开
缺点:和优点一样、只要其他程序历遍得到本窗体的句柄、然后sendmessage让窗体的标题(caption)改变就可以多开



方法三:全局原子、(02.09补上代码)
Private Declare Function GlobalAddAtom% Lib "kernel32" Alias "GlobalAddAtomA" (ByVal AtomName As String)
Private Declare Function GlobalFindAtom% Lib "kernel32" Alias "GlobalFindAtomA" (ByVal AtomName As String)
Private Declare Function GlobalDeleteAtom% Lib "kernel32" (ByVal AtomName As Integer)
Private Atom As Long
Private Sub IsAtom()
If GlobalFindAtom(App.EXEName) = 0 Then Atom = GlobalAddAtom(App.EXEName) Else unlaod Me
End Sub
Private Sub Form_Load()
IsAtom
End Sub
Private Sub Form_Unload(Cancel As Integer)
GlobalDeleteAtom Atom
End Sub
优点显而易见、非常规手段绝对不可能达到多开的目的、缺点么、、一旦程序被强制或非常规手段结束、就无法再次运行、原因很简单、当程序运行时会创建全局原子、一般情况下在程序退出时(unload事件)会删除全局原子、而强制结束程序则造成无法删除全局原子、所以就造成了无法打开的情况、、如果对这个情况你有好的解决方法、希望得到你的帮助、、
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

使程序只能运行一个实例

1,目标 使我们的程序只能有一个正在运行的实例。 并且在第二次运行时,若前一个实例主窗口处于最小化状态,就让前一个实例恢复原大小显示出来。 2. 原理 前一实例进程运行期间得留下一...

程序只运行一次并激活原来的程序

我们的程序有时候只允许运行一次,并且最好的情况是,如果程序第二次运行,就激活原来的程序。网上有很多的方法实现程序只运行一次,但对于激活原来的窗口却都不怎么好。关键就在于激活原来的程序,一般的做法是在工...

如何使自己的程序只运行一次

我介绍两个主流的方法。方法一:使用Mutex来进行1. 首先要添加如下的namespace:using System.Threading;2. 修改系统Main函数,大致如下:        bool...

VB超频快餐,让我一次用个够!

编程人员从大量的程序开发中积累了许多非常实用的经验与技巧,它们就象一盘盘的快餐,看似简单但营养绝对丰富!用“餐”之后,您的VB程序将立即超频。还犹豫什么,快来品尝品尝吧 ... VB超频快餐,让我一次用个够!(一)1.用Mid$命令超速字符串添加操作 2.从头开始删除集合项目 3.用InStr函数实现代码减肥 4.精用Boolean表达式,让代码再减肥 5.函数名巧做局部变量 VB超频快餐,让我一次用个够!(二)6.火眼识破隐藏的Variant变量 7.GoSub在编译程序中速度变慢 8.

制作自动运行程序(由vb6推广引用)

这需要将要启动的应用程序路径写到注册表中具体的路径是:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run只需要在上面的路径...
  • hyde82
  • hyde82
  • 2005-12-11 20:09
  • 1381

VB超频快餐,让我一次用个够!

编程人员从大量的程序开发中积累了许多非常实用的经验与技巧,它们就象一盘盘的快餐,看似简单但营养绝对丰富!用“餐”之后,您的VB程序将立即超频。还犹豫什么,快来品尝品尝吧 ... VB超频快餐,让我一次用个够!(一)1.用Mid$命令超速字符串添加操作 2.从头开始删除集合项目 3.用InStr函数实现代码减肥 4.精用Boolean表达式,让代码再减肥 5.函数名巧做局部变量 VB超频快餐,让我一次用个够!(二)6.火眼识破隐藏的Variant变量 7.GoSub在编译程序中速度变慢 8.

VB超频快餐,让我一次用个够!

编程人员从大量的程序开发中积累了许多非常实用的经验与技巧,它们就象一盘盘的快餐,看似简单但营养绝对丰富!用“餐”之后,您的VB程序将立即超频。还犹豫什么,快来品尝品尝吧 ... VB超频快餐,让我一次...
  • boovo
  • boovo
  • 2006-02-21 17:32
  • 1572

不错VB代码,收藏!!!

实现毫秒精度的延时 'Module Code: Option Explicit Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As LARGE_INTEGER) As Long Declare Function QueryPerformanceCounter Lib "kernel32" _ (lpPerformanceCount As LARGE_INTEGER) As Long Type LARGE_INTEGER LowPart As Long

VB超频快餐,让我一次用个够!

编程人员从大量的程序开发中积累了许多非常实用的经验与技巧,它们就象一盘盘的快餐,看似简单但营养绝对丰富!用“餐”之后,您的VB程序将立即超频。还犹豫什么,快来品尝品尝吧 ... VB超频快餐,让我一次...

C# 工厂

(转载)C#抽象工厂模式的几种实现方法及比较 Posted on 2008-12-05 19:45 chefZ 阅读(5127) <a href="http:/
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)