我试图禁用Windows键。转Bt基因在运行应用程序我得到一个错误“检测CallbackOnCollectedDelegate”下面是我的代码“检测到CallbackOnCollectedDelegate”
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Integer, ByVal lpfn As LowLevelKeyboardProcDelegate, ByVal hMod As IntPtr, ByVal dwThreadId As Integer) As IntPtr
Declare Function UnhookWindowsHookEx Lib "user32" Alias "UnhookWindowsHookEx" (ByVal hHook As IntPtr) As Boolean
Declare Function CallNextHookEx Lib "user32" Alias "CallNextHookEx" (ByVal hHook As IntPtr, ByVal nCode As Integer, ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) As Integer
Delegate Function LowLevelKeyboardProcDelegate(ByVal nCode As Integer, ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) As Integer
Const WH_KEYBOARD_LL As Integer = 13
Structure KBDLLHOOKSTRUCT
Dim vkCode As Integer
Dim scanCode As Integer
Dim flags As Integer
Dim time As Integer
Dim dwExtraInfo As Integer
End Structure
Dim intLLKey As IntPtr
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, IntPtr.Zero, 0)
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
UnhookWindowsHookEx(intLLKey)
End Sub
Private Function LowLevelKeyboardProc(ByVal nCode As Integer, ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) As Integer
Dim blnEat As Boolean = False
Select Case wParam
Case 256, 257, 260, 261
'Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key
blnEat = ((lParam.vkCode = 9) AndAlso (lParam.flags = 32)) Or
((lParam.vkCode = 27) AndAlso (lParam.flags = 32)) Or
((lParam.vkCode = 27) AndAlso (lParam.flags = 0)) Or
((lParam.vkCode = 91) AndAlso (lParam.flags = 1)) Or
((lParam.vkCode = 92) AndAlso (lParam.flags = 1))
End Select
If blnEat = True Then
Return 1
Else
Return CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam)
End If
End Function
任何帮助是非常赞赏
你能显示其余的错误信息吗?如何运行代码? –
这是完整的错误消息“Managed Debugging Assistant'CallbackOnCollectedDelegate'检测到'C:\ Users \ Louisa \ Documents \ Visual Studio 2015 \ Projects \ Amus \ Amus \ bin \ Debug \ Amus.vshost.exe'中存在问题。 附加信息:对类型为'Amus!Amus.Form1 + LowLevelKeyboardProcDelegate :: Invoke'的垃圾收集代理进行回调,这可能导致应用程序崩溃,损坏和数据丢失。将代理传递给非托管代码时,它们必须是通过托管应用程序保持活跃状态,直到确保它们永远不会被调用。“ – Louisa