🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: free.it.visual-basic
Article #1413

Intercettazione Ctrl+Esc in VB6 (qualche volenteroso?)

#1413
From: Claudio
Date: Sat, 24 Apr 2004 08:39
219 lines
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-mail

Show 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