Newsgroup: it.comp.lang.visual-basic
Titolo: AIUTO!!! API mouse_event

Avrei urgente bisogno di sapere come intercettare (e disabilitare) il tasto
destro del mouse.
Ho trovato l'API:
Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As
Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal
dwExtraInfo As Long)
Qualche anima pia saprebbe darmi una mano ad utilizzarla???
Possibilmente rispondetemi anche in e-mail all'indirizzo: 
gpa...@com-e.com
Grazie mille
Giampaolo

...



io ci provo: per pura curiosita', non e' che magari mi spieghi (magari con
un esempio?) come disabilitare una volta per tutte il tasto destro e
impedire la comparsa dei menu di contesto ?
comunque, dato che non e' urgente, se non hai voglia non ti preoccupare :-)
invece sarei grato a chi mi spiegasse come #@§*! convertire una misura da
pixel in cm
ciao
Francesco Mapelli ( 
mape...@tin.it
 )
http://members.xoom.com/Francesco
Mousestats, il contachilometri per il mouse
http://members.xoom.com/mousestats
Sito comune programmatori Visual Basic
http://members.xoom.com/it_lang_vb

impedire la comparsa dei menu di contesto ?
Ciao,
dunque, se hai un controllo specifico o più controlli specifici dei quali
vuoi inibire il menu di contesto devi intercettare il messaggio
WM_MENUCONTEXT. Fai un nuovo progetto con una form e un modulo BAS. Sulla
form metti un bottone di nome btnUnload e un textbox di nome txt. nella
sezione generale della form metti il seguente codice:
Option Explicit
Private Sub btnUnload_Click()
    Unload Me
End Sub
Private Sub Exit_Click()
    Unload Me
End Sub
Private Sub Form_Load()
    '// Begin the subclassing of frmMain by passing the
    '// address of our new WindowProcedure. SetWindowLong
    '// returns the address of the original WindowProcedure,
    '// so we store it in a global variable to restore
    '// when stopping the subclassing (tipically, in the
    '// Unload event).
    g_OldWndProc = SetWindowLong(txt.hwnd, _
                GWL_WNDPROC, AddressOf MyWndProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
    '// NEVER forget to restore the original WindowProcedure
    '// before unloading the form, Or GPFs will occur.
    Dim Dummy As Long
    Dummy = SetWindowLong(txt.hwnd, GWL_WNDPROC, g_OldWndProc)
End Sub
Nel modulo BAS invece metti il seguente:
Option Explicit
Global g_OldWndProc As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal
hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal
hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal
lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam
As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const GWL_HINSTANCE = (-6)
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_MOUSEMOVE = &H200
Public Const WM_USER = &H400
Public Const CF_BITMAP = 2
Public Const WM_COMMAND& = &H111
'**********************************
'**  Constant Definitions:
Public Const WM_NCHITTEST& = &H84
Public Const WM_NCACTIVATE& = &H86
Public Const WM_NCCALCSIZE& = &H83
Public Const WM_NCCREATE& = &H81
Public Const WM_NCDESTROY& = &H82
Public Const WM_NCLBUTTONDBLCLK& = &HA3
Public Const WM_NCLBUTTONDOWN& = &HA1
Public Const WM_NCLBUTTONUP& = &HA2
Public Const WM_NCMBUTTONDBLCLK& = &HA9
Public Const WM_NCMBUTTONDOWN& = &HA7
Public Const WM_NCMBUTTONUP& = &HA8
Public Const WM_NCMOUSEMOVE& = &HA0
Private Const WM_CONTEXTMENU& = &H7B
Private Const WM_MENUSELECT& = &H11F
'**********************************
'**  Constant Definitions:
Public Const HTBORDER& = 18
Public Const HTBOTTOM& = 15
Public Const HTBOTTOMLEFT& = 16
Public Const HTBOTTOMRIGHT& = 17
Public Const HTCAPTION& = 2
Public Const HTCLIENT& = 1
Public Const HTCLOSE& = 20
Public Const HTERROR& = (-2)
Public Const HTGROWBOX& = 4
Public Const HTHELP& = 21
Public Const HTLEFT& = 10
Public Const HTHSCROLL& = 6
Public Const HTMAXBUTTON& = 9
Public Const HTMENU& = 5
Public Const HTMINBUTTON& = 8
Public Const HTNOWHERE& = 0
Public Const HTOBJECT& = 19
Public Const HTREDUCE& = HTMINBUTTON
Public Const HTRIGHT& = 11
Public Const HTSIZE& = HTGROWBOX
Public Const HTSIZEFIRST& = HTLEFT
Public Const HTSIZELAST& = HTBOTTOMRIGHT
Public Const HTSYSMENU& = 3
Public Const HTTOP& = 12
Public Const HTTOPLEFT& = 13
Public Const HTTOPRIGHT& = 14
Public Const HTTRANSPARENT& = (-1)
Public Const HTVSCROLL& = 7
Public Const HTZOOM& = HTMAXBUTTON
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any,
Source As Any, ByVal Length As Long)
Declare Sub CopyMemoryFromPointer Lib "kernel32" Alias "RtlMoveMemory" (dest
As Any, ByVal Source As Long, ByVal Length As Long)
Declare Sub CopyMemoryAsAny Lib "kernel32" Alias "RtlMoveMemory" _
                      (pDest As Any, _
                       pSource As Any, _
                       ByVal dwLength As Long)
'// Subclass the form to trap its messages
Function MyWndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As
Long, ByVal lParam As Long) As Long
    On Error Resume Next
    Dim retVal As Long
    '// What message received?
    Select Case Msg
        Case WM_CONTEXTMENU
            retVal = 0
        Case Else       '// Other WM_xxx messages you want to intercept
             retVal = CallWindowProc(g_OldWndProc, hwnd, Msg, _
                            wParam, lParam)
    End Select
        MyWndProc = retVal
End Function
Se invece vuoi disabilitarlo sempre, non solo per i menu di contesto ma fare
proprio come se non esistesse un tasto destro del mouse, e vuoi farlo a
livello di sistema, devi implementare un hook di mouse di sistema. Non puoi
farlo da VB perché le funzioni di hook devono risiedere in una dll standard
che non puoi fare con VB. Sul sito comune c'è un esempio che usa un hook di
tipo Journal, e quello è l'unico che funziona anche con VB, ma nel tuo caso
non va bene perché Journal può solo ricevere notificazioni di messaggi, ma
non può intervenire sul flusso del messaggio (non può fare l'equivalente di
Retval=0 che trovi nel codice postato sopra).
Saluti,
Domenico