Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Wie man einen Windows hook in Visual C# erstellt.

Wichtig: Dieser Artikel wurde maschinell übersetzt und wird dann möglicherweise mithilfe des Community Translation Framework (CTF) von Mitgliedern unserer Microsoft Community nachbearbeitet. Weitere Informationen zu CTF finden Sie unter http://support.microsoft.com/gp/machine-translation-corrections/de.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 318804
Eine Microsoft Visual Basic-Version dieses Artikels finden Sie unter 319524.
Einführung
Dieser Artikel beschreibt, wie einen Hook festlegen, der für einen Thread und eine Hookprozedur ist der Mausanschluss als Beispiel. Hooks können Sie bestimmte Ereignisse überwachen. Sie können diese Ereignisse mit einem bestimmten Thread oder alle Threads den gleichen Desktop als aufrufende Thread zuordnen.
Weitere Informationen

Maus-Hook erstellen

Um einen Hook festzulegen, rufen Sie die Funktion der Anwendung aus der Datei "User32.dll". Diese Funktion installiert eine anwendungsdefinierte Hook-Prozedur Hook-Kette, die den Hook zugeordnet ist.

Ein Mausanschluss und Mausereignisse überwachen, gehen Sie folgendermaßen vor:
  1. Starten Sie Microsoft Visual Studio .NET.
  2. Klicken Sie im Menü Datei auf neu und klicken Sie dann auf Projekt.
  3. Klicken Sie im Dialogfeld Neues Projekt klicken Sie unter Projekttypenauf Visual C#-Projekte , und klicken Sie unter Vorlagenauf Windows-Anwendung . Geben Sie im Feld NameThreadSpecificMouseHook. Standardmäßig wird ein Formular mit dem Namen Form1 erstellt.
  4. Fügen Sie die folgende Codezeile in die Datei Form1.cs nach anderen Anweisungen verwenden .
    using System.Runtime.InteropServices;
  5. Fügen Sie folgenden Code in der Klasse Form1 .
    public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);//Declare the hook handle as an int.static int hHook = 0;//Declare the mouse hook constant.//For other hook types, you can obtain these values from Winuser.h in the Microsoft SDK.public const int WH_MOUSE = 7;private System.Windows.Forms.Button button1;//Declare MouseHookProcedure as a HookProc type.HookProc MouseHookProcedure;			//Declare the wrapper managed POINT class.[StructLayout(LayoutKind.Sequential)]public class POINT {	public int x;	public int y;}//Declare the wrapper managed MouseHookStruct class.[StructLayout(LayoutKind.Sequential)]public class MouseHookStruct {	public POINT pt;	public int hwnd;	public int wHitTestCode;	public int dwExtraInfo;}//This is the Import for the SetWindowsHookEx function.//Use this function to install a thread-specific hook.[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);//This is the Import for the UnhookWindowsHookEx function.//Call this function to uninstall the hook.[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]public static extern bool UnhookWindowsHookEx(int idHook);		//This is the Import for the CallNextHookEx function.//Use this function to pass the hook information to the next hook procedure in chain.[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);
  6. Fügen Sie ein Button -Steuerelement auf das Formular, und fügen Sie den folgenden Code in die Button1_click -Prozedur.
    private void button1_Click(object sender, System.EventArgs e){	if(hHook == 0)	{	        // Create an instance of HookProc.		MouseHookProcedure = new HookProc(Form1.MouseHookProc);						hHook = SetWindowsHookEx(WH_MOUSE, 					MouseHookProcedure, 					(IntPtr)0,					AppDomain.GetCurrentThreadId());		//If the SetWindowsHookEx function fails.		if(hHook == 0 )		{			MessageBox.Show("SetWindowsHookEx Failed");			return;		}		button1.Text = "UnHook Windows Hook";	}	else	{		bool ret = UnhookWindowsHookEx(hHook);		//If the UnhookWindowsHookEx function fails.		if(ret == false )		{			MessageBox.Show("UnhookWindowsHookEx Failed");			return;		}		hHook = 0;		button1.Text = "Set Windows Hook";		this.Text = "Mouse Hook";	} }
  7. Fügen Sie den folgenden Code für die MouseHookProc -Funktion in der Klasse Form1 hinzu.
    public static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam){	//Marshall the data from the callback.	MouseHookStruct MyMouseHookStruct = (MouseHookStruct) Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));	if (nCode < 0)	{		return CallNextHookEx(hHook, nCode, wParam, lParam);	}	else	{		//Create a string variable that shows the current mouse coordinates.		String strCaption = "x = " + 				MyMouseHookStruct.pt.x.ToString("d") + 					"  y = " + 		MyMouseHookStruct.pt.y.ToString("d");		//You must get the active form because it is a static function.		Form tempForm = Form.ActiveForm;        		//Set the caption of the form.		tempForm.Text = strCaption;		return CallNextHookEx(hHook, nCode, wParam, lParam); 	}}
  8. Drücken Sie F5, um das Projekt auszuführen. Klicken Sie auf das Formular, den Haken setzen. Die Mauskoordinaten auf der Titelleiste des Formulars angezeigt, wenn der Mauszeiger auf dem Formular. Klicken Sie erneut, um das Häkchen zu entfernen.

Globale Hooks werden im .NET Framework nicht unterstützt.

Mit Ausnahme der WH_KEYBOARD_LL Low-Level-Hook und der WH_MOUSE_LL Low-Level-Hook können Sie keine globalen Hooks im Microsoft .NET Framework implementieren. Zur Installation eines globalen Hooks wird ein nativer DLL-Export benötigt, damit sich der Hook selbst über eine valide, konsistente Prozedur in einen anderen Prozess einklinken kann. Dies erfordert einen DLL-Export. .NET Framework unterstützt keine DLL-Exporten. Verwalteter Code hat kein Konzept konsistente Wert für einen Funktionszeiger, da diese Funktionszeiger Proxys sind, die dynamisch erstellt werden.

Low-Level-Hook-Prozeduren werden Thread aufgerufen, die den Hook installiert. Low-Level-Hooks erfordern keine Hook-Prozedur in einer DLL implementiert werden.
Informationsquellen
Weitere Informationen zu Hooks finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 318804 – Letzte Überarbeitung: 10/04/2015 11:45:00 – Revision: 6.0

Microsoft .NET Framework 2.0, Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.0, Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbhowtomaster kbmt KB318804 KbMtde
Feedback
html>