⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 用VB编写的接收卫星接收机的是数据
💻
字号:
Attribute VB_Name = "只让一个实例运行的代码模块"
'*****************************************************
' 让程序只运行一次实例的模块
'
' 1.给应用程序添加该模块内容
' 2.在Form_Load   中调用 procInstanceStart("变量名")
' 3.在Form_Unload 中调用 procInstanceEnd()

'  其中
' "变量名" 好比程序的身份证号码, 请使用一个能唯一标识
' 该程序的字串作变量名并以字母开头。

'*****************************************************

' 让程序只能运行一个实例
Public Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As SECURITY_ATTRIBUTES, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Public Declare Function OpenMutex Lib "kernel32" Alias "OpenMutexA" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long


Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SYNCHRONIZE = &H100000
Public Const MUTANT_QUERY_STATE = &H1
Public Const MUTEX_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or MUTANT_QUERY_STATE)

Public biIsAppRunning As Boolean
Public lngMutexHandle As Long

Public Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Long
End Type

' 该过程写在程序启动事件中(Form_Load)
Public Sub procInstanceStart(strMutexName As String)
  Dim mutexTmp As SECURITY_ATTRIBUTES

lngMutexHandle = OpenMutex(MUTEX_ALL_ACCESS, False, strMutexName)
If lngMutexHandle = 0 Then

  'mutexTmp.bInheritHandle = False
  lngMutexHandle = CreateMutex(mutexTmp, True, strMutexName)
  blIsAppRunning = True
Else
  ' 如果已运行 ADD Codes Here
  blIsAppRunning = False
  MsgBox "当前已有一个 " + strMutexName + " 实例在运行"
  
  Unload frmMain
  End
End If
End Sub

' 该过程写在程序退出前(Form_Unload)
Public Sub procInstanceEnd()
  If blIsAppRunning Then
   CloseHandle (lngMutexHandle)
  End If
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -