Newsgroup: it.comp.lang.visual-basic
Titolo: Definizione tipi in VB6

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. 
pki...@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

End Function
Un altro modulo ... di classe.
Ciao!

Carissimo,
innanzitutto grazie, veramente, non ci speravo piů.
Ho fatto la correzione che tu (posso vero?) mi hai suggerito. Il programma
ora gira, nel senso che riesco a compilare l'exe, perň il risultato non č
quello desiderato. Credevo che come si caricasse il form l'opzione Ctrl+Esc
non desse piů il risultato di far apparire il menů start, invece appare di
nuovo. Hai idea di quale parte di codice devo mettere nell'evento Keydown (o
keypress)?
Ancora, ripeto, ancora GRAZIE!
Claudio Facciolo
ErPotenza <no....@thank.you> wrote in message
6ohp80hulmu96psa3...@4ax.com...


keypress)?
Nell'esempio questi due eventi non vengono presi in considerazione.
Col codice dell'esempio viene "agganciato" l'input della tastiera, a
prescindere dall'applicazione attiva.
Ciao!

Hai ragione!!
Sull'XP funziona! Credo anche sul 2000. Per 9x ed ME posso sempre simulare
che sia in funzione lo screensaver con la relativa API, e quindi il Ctrl+Esc
è comunque inibito.
Ti ringrazio ancora tantissimo, spero (ma non credo!) di poter ricambiare in
futuro.
Cordialmente
Claudio Facciolo