Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Versão para a Microsoft Visual c# deste artigo, consulte318804
(http://support.microsoft.com/kb/318804/
)
.
Este artigo descreve como definir uma rotina que é específica para um thread de e para um procedimento da rotina. Este artigo utiliza o hook do rato como um exemplo.
Pode utilizar ganchos para monitorizar determinados tipos de eventos. Pode associar estes eventos com um tópico específico ou com todos os threads que estão no mesmo ambiente de trabalho como um thread chamada.
Para definir uma rotina, chame oSetWindowsHookExfunção do ficheiro User32. dll. Esta função instala um procedimento da rotina definidas pela aplicação da cadeia de rotina associada a hook.
Para definir uma rotina de rato e monitorizar os eventos de rato, siga estes passos:
Inicie o Microsoft Visual Studio .NET.
Sobre oFicheiromenu, aponte paraNovoe, em seguida, clique emProjecto.
NoNovo projectocaixa de diálogo, clique emProjectos do Visual BasicemTipos de projecto. Em seguida, clique emAplicação do WindowsemModelos.
NoNomeEscrevaThreadSpecificMouseHook. Por predefinição, é criado um formulário é denominado Form1.
No início do ficheiro Form1. vb, cole o seguinte código.
Imports System.Runtime.InteropServices
Public Delegate Function CallBack( _
ByVal nCode As Integer, _
ByVal wParam As IntPtr, _
ByVal lParam As IntPtr) As Integer
NoForm1classe, cole o seguinte código.
'Declare the mouse hook constant.
'For other hook types, obtain these values from Winuser.h in Microsoft SDK.
Dim WH_MOUSE As Integer = 7
Shared hHook As Integer = 0
'Keep the reference so that the delegate is not garbage collected.
Private hookproc As CallBack
'Import for the SetWindowsHookEx function.
<DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function SetWindowsHookEx _
(ByVal idHook As Integer, ByVal HookProc As CallBack, _
ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer
End Function
'Import for the CallNextHookEx function.
<DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function CallNextHookEx _
(ByVal idHook As Integer, ByVal nCode As Integer, _
ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
End Function
'Import for the UnhookWindowsHookEx function.
<DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function UnhookWindowsHookEx _
(ByVal idHook As Integer) As Boolean
End Function
'Point structure declaration.
<StructLayout(LayoutKind.Sequential)> Public Structure Point
Public x As Integer
Public y As Integer
End Structure
'MouseHookStruct structure declaration.
<StructLayout(LayoutKind.Sequential)> Public Structure MouseHookStruct
Public pt As Point
Public hwnd As Integer
Public wHitTestCode As Integer
Public dwExtraInfo As Integer
End Structure
Adicionar um botão ao formulário . Em seguida, cole o seguinte código nobutton1_clickprocedimento.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If hHook.Equals(0) Then
hookproc = AddressOf MouseHookProc
hHook = SetWindowsHookEx(WH_MOUSE, _
hookproc, _
IntPtr.Zero, _
AppDomain.CurrentDomain.GetCurrentThreadId())
If hHook.Equals(0) Then
MsgBox("SetWindowsHookEx Failed")
Return
Else
Button1.Text = "UnHook Windows Hook"
End If
Else
Dim ret As Boolean = UnhookWindowsHookEx(hHook)
If ret.Equals(False) Then
MsgBox("UnhookWindowsHookEx Failed")
Return
Else
hHook = 0
Button1.Text = "Set Windows Hook"
Me.Text = "Mouse Hook"
End If
End If
End Sub
NoForm1classe, cole o seguinte código para oMouseHookProcfunção.
Public Shared Function MouseHookProc( _
ByVal nCode As Integer, _
ByVal wParam As IntPtr, _
ByVal lParam As IntPtr) As Integer
Dim MyMouseHookStruct As New MouseHookStruct()
Dim ret As Integer
If (nCode < 0) Then
Return CallNextHookEx(hHook, nCode, wParam, lParam)
End If
MyMouseHookStruct = CType(Marshal.PtrToStructure(lParam, MyMouseHookStruct.GetType()), MouseHookStruct)
Dim tempForm As Form
tempForm = Form.ActiveForm()
Dim strCaption As String
strCaption = "x = " & MyMouseHookStruct.pt.x & " y = " & MyMouseHookStruct.pt.y
tempForm.Text = strCaption
Return CallNextHookEx(hHook, nCode, wParam, lParam)
End Function
Prima F5 para executar o projecto. Clique no botão no formulário para definir o hook. As coordenadas do ponteiro aparecem na barra de legenda formulário quando move o ponteiro no formulário.
Rotinas globais não são suportadas no .NET Framework
Não podem implementar rotinas globais no .NET Framework. Ganchos de nível inferior executados no processo do autor da chamada. Estas rotinas não requerem que o código é injectado em outros processos. Estes podem ser implementadas em código gerido, mas não podem continuar a trabalhar. Uma vez que cada evento de entrada tem de esperar gancho de baixo nível regressar antes do gancho é distribuído, ganchos lentos significativamente podem interferir com a capacidade de resposta do sistema. Windows remove silenciosamente qualquer rotina demora demasiado tempo a processar. Uma vez que o código gerido não consegue controlar o momento em que é executado o recolector de dados não utilizados, não é garantido que o procedimento da rotina devolverá sempre suficientemente rápido para evitar a ser removido.
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 319524
(http://support.microsoft.com/kb/319524/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
O que podemos fazer para melhor estas informações?
Para proteger a sua privacidade, não inclua as informações de contacto nos comentários.
Obrigado! Os seus comentários serão utilizados para nos ajudar a melhorar o conteúdo do suporte. Para obter mais opções de assistência, visite a Home Page da Ajuda e Suporte.