S
StarikStarik2705
есть код который симулирует нажатие клавиши любой, с помощью библиотеки виндовса user32.dll, но это лишь симуляция нажать/отжать, есть у котого идеи как при помощи методов лотуса перехватить нажатие клавиши? не собития ждать OnKeyPress гдето в представлении а именно методами библиотек Win API/ Сталкивался ли кто с такой задачей? я что хочу сделать, заблокировать комбинацию клавишь "вставить" ctrl + v, есть у меня код, мужик утверждает который написал его что мол всё чики пуки работает, вот пример, я его в клас запихнул но там куча на что ругаеться компилятор а где это взять не знаю даже.
option Explicit
'Implements KeyboardHook
Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" (ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(pDest As Any, _
pSource As Any, _
ByVal cb As Long)
Declare Function GetAsyncKeyState Lib "user32" _
(ByVal vKey As Long) As Integer
Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Type KBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
Time As Long
dwExtraInfo As Long
End Type
' Low-Level Keyboard Constants
Private Const HC_ACTION = 0
Private Const LLKHF_EXTENDED = &H1
Private Const LLKHF_INJECTED = &H10
Private Const LLKHF_ALTDOWN = &H20
Private Const LLKHF_UP = &H80
' Virtual Keys
Public Const VK_TAB = &H9
public Const VK_CONTROL = &H11
Public Const VK_ESCAPE = &H1B
Public Const VK_DELETE = &H2E
Private Const WH_KEYBOARD_LL = 13&
Public KeyboardHandle As Long
Public KeyboardHook As KeyboardHook
Public Class AB
Sub Initialize
End Sub
Private Sub Form_Load()
Set KeyboardHandler.KeyboardHook = Me
HookKeyboard
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnhookKeyboard
End Sub
Private Function KeyboardHook_BlockAltEscape() As Boolean
End Function
Private Function KeyboardHook_BlockAltTab() As Boolean
End Function
Private Function KeyboardHook_BlockControlEscape() As Boolean
KeyboardHook_BlockControlEscape = True
End Function
' Implement this function to block as many key combinations as
' you'd like
Public Function IsHooked(Hookstruct As KBDLLHOOKSTRUCT) As Boolean
If (KeyboardHook Is Nothing) Then
IsHooked = False
Exit Function
End If
If (Hookstruct.vkCode = VK_ESCAPE) And _
CBool(GetAsyncKeyState(VK_CONTROL) _
And &H8000) Then
IsHooked = KeyboardHook.BlockControlEscape
Call HookedState(IsHooked, "Ctrl + Esc blocked")
Exit Function
End If
If (Hookstruct.vkCode = VK_TAB) And _
CBool(Hookstruct.flags And _
LLKHF_ALTDOWN) Then
IsHooked = KeyboardHook.BlockAltTab
Call HookedState(IsHooked, "Alt + Tab blocked")
Exit Function
End If
If (Hookstruct.vkCode = VK_ESCAPE) And _
CBool(Hookstruct.flags And _
LLKHF_ALTDOWN) Then
IsHooked = KeyboardHook.BlockAltEscape
Call HookedState(IsHooked, "Alt + Escape blocked")
Exit Function
End If
End Function
Private Sub HookedState(ByVal Hooked As Boolean, _
ByVal Text As String)
If (Hooked) Then Print Text
End Sub
Public Function KeyboardCallback(ByVal Code As Long,ByVal wParam As Long, ByVal lParam As Long) As Long
Dim Hookstruct As KBDLLHOOKSTRUCT
If (Code = HC_ACTION) Then
' Copy the keyboard data out of the lParam (which is a pointer)
Call CopyMemory(Hookstruct, ByVal lParam, Len(Hookstruct))
If (IsHooked(Hookstruct)) Then
KeyboardCallback = 1
Exit Function
End If
End If
KeyboardCallback = CallNextHookEx(KeyboardHandle, _
Code, wParam, lParam)
End Function
Public Sub HookKeyboard()
KeyboardHandle = SetWindowsHookEx( WH_KEYBOARD_LL,KeyboardCallback, App.hInstance, 0&)
Call CheckHooked
End Sub
Public Sub CheckHooked()
If (Hooked) Then
Print "Keyboard hooked"
Else
Print "Keyboard hook failed: " & Err.LastDllError
End If
End Sub
Private Function Hooked()
Hooked = KeyboardHandle <> 0
End Function
Public Sub UnhookKeyboard()
If (Hooked) Then
Call UnhookWindowsHookEx(KeyboardHandle)
End If
End Sub
' KeyboardHook.cls
Public Function BlockControlEscape() As Boolean
End Function
Public Function BlockAltEscape() As Boolean
End Function
Public Function BlockAltTab() As Boolean
End Function
End Class
option Explicit
'Implements KeyboardHook
Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" (ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(pDest As Any, _
pSource As Any, _
ByVal cb As Long)
Declare Function GetAsyncKeyState Lib "user32" _
(ByVal vKey As Long) As Integer
Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Type KBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
Time As Long
dwExtraInfo As Long
End Type
' Low-Level Keyboard Constants
Private Const HC_ACTION = 0
Private Const LLKHF_EXTENDED = &H1
Private Const LLKHF_INJECTED = &H10
Private Const LLKHF_ALTDOWN = &H20
Private Const LLKHF_UP = &H80
' Virtual Keys
Public Const VK_TAB = &H9
public Const VK_CONTROL = &H11
Public Const VK_ESCAPE = &H1B
Public Const VK_DELETE = &H2E
Private Const WH_KEYBOARD_LL = 13&
Public KeyboardHandle As Long
Public KeyboardHook As KeyboardHook
Public Class AB
Sub Initialize
End Sub
Private Sub Form_Load()
Set KeyboardHandler.KeyboardHook = Me
HookKeyboard
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnhookKeyboard
End Sub
Private Function KeyboardHook_BlockAltEscape() As Boolean
End Function
Private Function KeyboardHook_BlockAltTab() As Boolean
End Function
Private Function KeyboardHook_BlockControlEscape() As Boolean
KeyboardHook_BlockControlEscape = True
End Function
' Implement this function to block as many key combinations as
' you'd like
Public Function IsHooked(Hookstruct As KBDLLHOOKSTRUCT) As Boolean
If (KeyboardHook Is Nothing) Then
IsHooked = False
Exit Function
End If
If (Hookstruct.vkCode = VK_ESCAPE) And _
CBool(GetAsyncKeyState(VK_CONTROL) _
And &H8000) Then
IsHooked = KeyboardHook.BlockControlEscape
Call HookedState(IsHooked, "Ctrl + Esc blocked")
Exit Function
End If
If (Hookstruct.vkCode = VK_TAB) And _
CBool(Hookstruct.flags And _
LLKHF_ALTDOWN) Then
IsHooked = KeyboardHook.BlockAltTab
Call HookedState(IsHooked, "Alt + Tab blocked")
Exit Function
End If
If (Hookstruct.vkCode = VK_ESCAPE) And _
CBool(Hookstruct.flags And _
LLKHF_ALTDOWN) Then
IsHooked = KeyboardHook.BlockAltEscape
Call HookedState(IsHooked, "Alt + Escape blocked")
Exit Function
End If
End Function
Private Sub HookedState(ByVal Hooked As Boolean, _
ByVal Text As String)
If (Hooked) Then Print Text
End Sub
Public Function KeyboardCallback(ByVal Code As Long,ByVal wParam As Long, ByVal lParam As Long) As Long
Dim Hookstruct As KBDLLHOOKSTRUCT
If (Code = HC_ACTION) Then
' Copy the keyboard data out of the lParam (which is a pointer)
Call CopyMemory(Hookstruct, ByVal lParam, Len(Hookstruct))
If (IsHooked(Hookstruct)) Then
KeyboardCallback = 1
Exit Function
End If
End If
KeyboardCallback = CallNextHookEx(KeyboardHandle, _
Code, wParam, lParam)
End Function
Public Sub HookKeyboard()
KeyboardHandle = SetWindowsHookEx( WH_KEYBOARD_LL,KeyboardCallback, App.hInstance, 0&)
Call CheckHooked
End Sub
Public Sub CheckHooked()
If (Hooked) Then
Print "Keyboard hooked"
Else
Print "Keyboard hook failed: " & Err.LastDllError
End If
End Sub
Private Function Hooked()
Hooked = KeyboardHandle <> 0
End Function
Public Sub UnhookKeyboard()
If (Hooked) Then
Call UnhookWindowsHookEx(KeyboardHandle)
End If
End Sub
' KeyboardHook.cls
Public Function BlockControlEscape() As Boolean
End Function
Public Function BlockAltEscape() As Boolean
End Function
Public Function BlockAltTab() As Boolean
End Function
End Class