Senden Sie Maus & Tastatur-Ereignisse

Bin ich, eine app zu entwickeln, die senden einige Tasten-oder Maus-events an das aktive Fenster.

Ich bin mit dieser Klasse:
Maus

using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Mouse
{
    public static class VirtualMouse
    {
        //import the necessary API function so .NET can
        //marshall parameters appropriately
        [DllImport("user32.dll")]
        static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

        //constants for the mouse_input() API function
        private const int MOUSEEVENTF_MOVE = 0x0001;
        private const int MOUSEEVENTF_LEFTDOWN = 0x0002;
        private const int MOUSEEVENTF_LEFTUP = 0x0004;
        private const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
        private const int MOUSEEVENTF_RIGHTUP = 0x0010;
        private const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
        private const int MOUSEEVENTF_MIDDLEUP = 0x0040;
        private const int MOUSEEVENTF_ABSOLUTE = 0x8000;    

        //simulates movement of the mouse.  parameters specify changes
        //in relative position.  positive values indicate movement
        //right or down
        public static void Move(int xDelta, int yDelta)
        {
            mouse_event(MOUSEEVENTF_MOVE, xDelta, yDelta, 0, 0);
        }

        //simulates movement of the mouse.  parameters specify an
        //absolute location, with the top left corner being the
        //origin
        public static void MoveTo(int x, int y)
        {
            mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x, y, 0, 0);
        }

        //simulates a click-and-release action of the left mouse
        //button at its current position
        public static void LeftClick()
        {
            mouse_event(MOUSEEVENTF_LEFTDOWN, Control.MousePosition.X, Control.MousePosition.Y, 0, 0);
            mouse_event(MOUSEEVENTF_LEFTUP, Control.MousePosition.X, Control.MousePosition.Y, 0, 0);
        }    
        public static void RightClick()
        {
            mouse_event(MOUSEEVENTF_RIGHTDOWN, Control.MousePosition.X, Control.MousePosition.Y, 0, 0);
            mouse_event(MOUSEEVENTF_RIGHTUP, Control.MousePosition.X, Control.MousePosition.Y, 0, 0);
        }
    }
}

Tastatur

using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Mouse
{
    public static class VirtualKeyboard
    {
        [DllImport("user32.dll")] static extern uint keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);    
        public static void KeyDown(System.Windows.Forms.Keys key)
        {
            keybd_event((byte)key, 0, 0, 0);
        }

        public static void KeyUp(System.Windows.Forms.Keys key)
        {
            keybd_event((byte)key, 0, 0x7F, 0);
        }
    }
}

dies ist mein Test-code:

 private void button1_Click(object sender, EventArgs e)
 {
    Thread.Sleep(2000);            
    VirtualMouse.Move(100, 100);
    VirtualMouse.RightClick();
    VirtualKeyboard.KeyDown(System.Windows.Forms.Keys.A);
    VirtualKeyboard.KeyUp(System.Windows.Forms.Keys.A);
 }

Maus bewegt wird, aber nicht senden klicken. Irgendeine Idee?
Wie kann ich eine Taste weiterhin gedrückt, für einige Zeit? Ich habe versucht, mit Gewinde.schlafen zwischen KeyDown und KeyUp und es funktioniert nicht.

InformationsquelleAutor Manu | 2011-12-01
Schreibe einen Kommentar