VB 聲明

Declare Function CreateSemaphore Lib "kernel32" Alias "CreateSemaphoreA" (lpSemaphoreAttributes As SECURITY_ATTRIBUTES, ByVal lInitialCount As Long, ByVal lMaximumCount As Long, ByVal lpName As String) As Long

作用是創建一個信號

這裡給出返回值介紹,日後會交大家如何破解這種多開

返回值介紹  

返回類型:Long

當返回= 0

就會調用GetLastError

若是出現同名的信號 則GetLastError會返回ERROR_ALREADY_EXISTS

參數介紹

lpSemaphoreAttributes 

指定一個SECURITY_ATTRIBUTES的結構體 也可以傳遞零值(將參數類型設為Long)即

Declare Function CreateSemaphore Lib "kernel32" Alias "CreateSemaphoreA" (lpSemaphoreAttributes As Long, ByVal lInitialCount As Long, ByVal lMaximumCount As Long, ByVal lpName As String) As Long

lInitialCount

設置信號的初始計數,這裡設置窗體最多可開幾個視窗與 lMaximumCount設同值

lMaximumCount

設置信號的最大計數,這裡設置窗體最多可開幾個視窗與lInitialCount設同值

lpName

信號對象的名稱


再來 還有一個函數

WaitForSingleObject的用法

聲明

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

參數

hHandle 就是句柄!!

dwMilliseconds  就是等待時間

如果有信號狀態返回值=0

但是如果時間超過dwMilliseconds的值 我們設為0 (就是立即判斷)

且無信號狀態 則返回WAIT_TIMEOUT


開始編寫代碼

On Error Resume Next

Dim FormName As String
Dim a, b As Long

FormName = "UserForm"
a = CreateSemaphore(0, 3, 3, FormName)

b = WaitForSingleObject(a, 0)

If b <> 0 Then
MsgBox "程式只能3開", vbOKOnly + 16, "錯誤"

End
End If

加在Form的Load事件裡就可以限制了


pua0156k 發表在 痞客邦 PIXNET 留言(0) 人氣()