Jak nastavit propojení oken v aplikaci Visual C#.NET

Překlady článku Překlady článku
ID článku: 318804 - Produkty, které se vztahují k tomuto článku.
Aplikace Microsoft Visual Basic verzi tohoto článku naleznete 319524.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Úvod

Tento článek popisuje, jak nastavit hák, používaný k podprocesu a procedura zavěšení pomocí úpravu ovladače myši jako příklad. Háky slouží ke sledování určitých typech událostí. Tyto události můžete spojit s konkrétní vlákno nebo všechny podprocesy ve stejné plochy jako volající vlákno.

Další informace

Nastavit úpravu ovladače myši

Chcete-li nastavit háčku, zavolejte SetWindowsHookEx funkci souboru User32.dll. Tato funkce nainstaluje procedury definované aplikací háčkem v řetězci háčkem spojené s háku.

Nastavit úpravu ovladače myši a sledovat události myši, postupujte takto:
  1. Spusťte aplikaci Visual Studio.NET.
  2. V Soubor příkaz Novýa klepněte na tlačítko Projekt.
  3. V Nový projekt Dialogové okno, klepněte na tlačítko Visual C# projekty ve skupinovém rámečku Typy projektůa klepněte na tlačítko Aplikace systému Windows ve skupinovém rámečku Šablony. V Název Typ pole ThreadSpecificMouseHook. Ve výchozím nastavení je vytvořen formulář, který je pojmenován Formulář1.
  4. Přidejte následující řádek kódu v souboru Form1.cs za sebou použití příkazy.
    using System.Runtime.InteropServices;
  5. Doplňuje se nový kód v Formulář1 Třída.
    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. Přidat Tlačítko řízení do formuláře a potom přidejte následující kód v Button1_click postup.
    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. Přidejte následující kód MouseHookProc funkce v Formulář1 Třída.
    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. Stisknutím klávesy F5 spuštění projektu. Klepněte na tlačítko ve formuláři nastavení háku. Souřadnice myši se zobrazí v záhlaví formuláře při pohybu ukazatele na formuláři. Klepněte na tlačítko znovu na háku.

Globální zavěšení není podporováno v.NET Framework

S výjimkou pro nízkoúrovňové háku WH_KEYBOARD_LL a nižší úrovně háku WH_MOUSE_LL nemůže implementovat globální zavěšení Microsoft.Rozhraní .NET Framework. Chcete-li nainstalovat globální zavěšení, musí mít háčku nativní export DLL, se nastříkne se v jiný proces, který vyžaduje volání do funkce platné a konzistentní. Toto chování se vyžaduje export knihovny DLL. Na.NET Framework nepodporuje vývozy knihovny DLL. Spravovaný kód nemá žádný koncept hodnotu konzistentní pro ukazatel na funkci, protože jsou tyto ukazatele funkce proxy servery, které jsou vytvořeny dynamicky.

Nízké úrovně háčkem postupy se nazývají v podprocesu, který nainstalován háku. Nízké úrovně háky nevyžadují, že procedura zavěšení prováděny v knihovně DLL.

Odkazy

Další informace o háky navštivte následující Web společnosti Microsoft Developer Network (MSDN):
http://msdn.microsoft.com/en-us/library/ms632589 (VS.85) .aspx

Vlastnosti

ID článku: 318804 - Poslední aktualizace: 19. května 2011 - Revize: 5.0
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbhowtomaster kbmt KB318804 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:318804

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com