Article View: free.it.visual-basic
Article #1413Intercettazione Ctrl+Esc in VB6 (qualche volenteroso?)
From: Claudio
Date: Sat, 24 Apr 2004 08:39
Date: Sat, 24 Apr 2004 08:39
219 lines
6416 bytes
6416 bytes
Innanzitutto grazie per avere aperto questo messaggio.
Sto cercando di sviluppare un'applicazione che, anche in Win2000 ed XP, non
consenta di visualizzare il men� start (Ctrl+Esc). Ossia che quando si preme
Ctrl+Esc tale azione venga ignorata ed il men� non appaia. Ho trovato del
codice molto interessante sul sito www.vb2themax.com tuttavia (ho copiato il
codice sul form e sul modulo correttamente) quando do il run appare il
messaggio: "Tipo definito dall'utente non definito" subito dopo la prima
riga di codice, la
Implements KeyboardHook
Confesso di non essere molto pratico, qualcuno potrebbe dirmi cosa devo
aggiungere? Lo scopo finale, ripeto, � quello che quando viene premuto
Ctrl+Esc tale azione venga ignorata.
Grazie tantissimo, riporto il codice del form e del modulo.
Claudio Facciolo
Codice:
.
' Form1.frm
Option Explicit
Implements KeyboardHook
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
' Keyboardhandler.bas - Demonstrates low-level keyboard hooks
' Copyright (c) 2002. All Rights Reserved
' By Paul Kimmel. pkimmel@softconcepts.com
'http://msdn.microsoft.com/library/default.asp?url=
'/library/en-us/winui/WinUI/WindowsUserInterface
'/Windowing/Hooks/HookReference/HookFunctions/LowLevelKeyboardProc.asp
Option Explicit
Public Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Public 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
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(pDest As Any, _
pSource As Any, _
ByVal cb As Long)
Private Declare Function GetAsyncKeyState Lib "user32" _
(ByVal vKey As Long) As Integer
Private Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private 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
' Implement this function to block as many key combinations as
' you'd like
Public Function IsHooked(ByRef 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 Debug.Print Text
End Sub
Public Function KeyboardCallback(ByVal Code As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Static 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, AddressOf KeyboardCallback, _
App.hInstance, 0&)
Call CheckHooked
End Sub
Public Sub CheckHooked()
If (Hooked) Then
Debug.Print "Keyboard hooked"
Else
Debug.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
Technical Details
Message-ID:
<PIpic.136375$rM4.5315302@news4.tin.it>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!news.glorb.com!newsfeed1.uni2.dk!news-out.tin.it!news-in.tin.it!news4.tin.it.POSTED!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: ITALIAN,ASCII X-Google-Thread: f94ee,4d6200ef8817eca9,start X-Google-Attributes: gidf94ee,public X-Google-ArrivalTime: 2004-04-24 01:39:13 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!news.glorb.com!newsfeed1.uni2.dk!news-out.tin.it!news-in.tin.it!news4.tin.it.POSTED!not-for-mail From: "Claudio" <cla.greg@ciaoweb.it> Newsgroups: free.it.visual-basic Subject: Intercettazione Ctrl+Esc in VB6 (qualche volenteroso?) Lines: 222 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.00.2615.200 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200 Message-ID: <PIpic.136375$rM4.5315302@news4.tin.it> Date: Sat, 24 Apr 2004 08:39:11 GMT NNTP-Posting-Host: 82.49.169.41 X-Complaints-To: newsmaster@tin.it X-Trace: news4.tin.it 1082795951 82.49.169.41 (Sat, 24 Apr 2004 10:39:11 MET DST) NNTP-Posting-Date: Sat, 24 Apr 2004 10:39:11 MET DST Organization: TIN