新聞| | PChome| 登入
2007-10-25 23:52:03 | 人氣95| 回應0 | 上一篇 | 下一篇
推薦 0 收藏 0 轉貼0 訂閱站台

如何使Mouse的右鍵無效(Mouse Hook)

來源:cww

讓Mouse的右鍵無效,其實也就是攔截WM_RBUTTONDOWN/WM_RBUTTONUP,但是,如果只針
對某個Window/有hWnd的控制項,那便是使用SubClass來做,如果針對的是整個Process
那麼,用Mouse Hook比較好,然而這只針對單一個Process,而如何讓所有的Process都
如此,那得使用Remote的Mouse Hook,但這是要放在.Dll之中,而單純用VB來做我沒有
試出來。
'以下在Form
Private Sub Form_Load()
Call EnableHook
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Debug.Print X; Y
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Debug.Print X; Y
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call FreeHook
End Sub
'以下在.Bas
 Public Const WH_MOUSE = 7
 Public Const WM_RBUTTONDOWN = &H204
 Public Const HC_ACTION = 0
 Public Const WM_RBUTTONUP = &H205

 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 Function UnhookWindowsHookEx Lib "user32" _
    (ByVal hHook As Long) As Long
 Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
    ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
 Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _
   (lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy As Long)
 Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
 Public theForm As Form
 Public hHook As Long   ' handle of Hook Procedure
 Sub EnableHook()
    If hHook = 0 Then
       hHook = SetWindowsHookEx(WH_MOUSE, AddressOf MouseHookProc, App.hInstance, 0)
    End If
 End Sub
 Sub FreeHook()
 Dim ret As Long
 If hHook <> 0 Then
    ret = UnhookWindowsHookEx(hHook)
    hHook = 0
 End If
 End Sub
 Function MouseHookProc(ByVal code As Long, ByVal wParam As Long, _
                 ByVal lParam As Long) As Long
  If code < 0 Then
     MouseHookProc = CallNextHookEx(hHook, code, wParam, lParam)
     Exit Function
  End If
  If wParam = WM_RBUTTONDOWN Or wParam = WM_RBUTTONUP Then
      MouseHookProc = 1 '表示不處理這個訊息
      Exit Function
  End If
  MouseHookProc = 0 '表示要處理這個訊息
  Call CallNextHookEx(hHook, code, wParam, lParam)
 End Function

台長: Kenny
人氣(95) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 教育學習(進修、留學、學術研究、教育概況) | 個人分類: 程式設計 |
此分類下一篇:製作圖形的Mask圖
此分類上一篇:不讓Form的左端出螢幕

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文