.net - C # detekterer nøglebegivenhed i alle vinduer

Indlæg af Hanne Mølgaard Plasc

Problem



Hej, jeg har noget problem med key event handler. Dette er kilden:


using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Windows.Forms;
        using System.Diagnostics;
        using System.Threading;

        namespace WindowsFormsApplication3
        {
            public partial class Form1 : Form
            {
                public Form1()
                {
                    InitializeComponent();
                }

                [System.Runtime.InteropServices.DllImport("user32.dll")]
                public static extern void mouse\_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);


        public const int MOUSEEVENTF\_LEFTDOWN = 0x02;
        public const int MOUSEEVENTF\_LEFTUP = 0x04;
        public const int MOUSEEVENTF\_RIGHTDOWN = 0x08;
        public const int MOUSEEVENTF\_RIGHTUP = 0x10;


                public void Form1\_KeyPessed(object sender, KeyEventArgs e)
                {
                    if (e.KeyCode == Keys.F2)
                    {
                        DrawSquare();
                    }
                }

                public void DrawSquare()
                {
                    int line = Convert.ToInt16(textBox1.Text);
                    int time = Convert.ToInt16(textBox2.Text);

                    int x = MousePosition.X;
                    int y = MousePosition.Y;
                    Cursor.Position = new Point(x - line / 2, y - line / 2);
                    mouse\_event(MOUSEEVENTF\_LEFTDOWN, x, y, 0, 0);
                    Thread.Sleep(time);
                    Cursor.Position = new Point(x - line / 2, y + line / 2);
                    Thread.Sleep(time);
                    Cursor.Position = new Point(x - line / 2, y + line / 2);
                    Thread.Sleep(time);
                    Cursor.Position = new Point(x + line / 2, y - line / 2);
                    Thread.Sleep(time);
                    Cursor.Position = new Point(x - line / 2, y - line / 2);
                    mouse\_event(MOUSEEVENTF\_LEFTUP, x, y, 0, 0);
                    Thread.Sleep(time);
                    Cursor.Position = new Point(x, y);
                }
            }      
        }


Nu trækker det kun firkantet, når jeg trykker på F2 i form, men jeg vil have det til at fungere på alle vinduer.
Hvad skal jeg have mere?
(dette er en god auto skuffe til perfekte figurer)

Bedste reference


Hvis du kun ønsker at håndtere et par nøglekombinationer, kan du bruge RegisterHotKey. Hvis du vil opdage alle forskellige vigtige begivenheder, skal du gå med den globale krog, som Paul foreslog. [3]

Andre referencer 1


Du har brug for en global krog. Der er en strålende implementering her http://www.codeproject.com/KB/cs/globalhook.aspx[5]