2011-12-01 12 views
7

मैं एक ऐप विकसित कर रहा हूं जिसे सक्रिय विंडो में कुछ चाबियाँ या माउस ईवेंट भेजना है।माउस और कीबोर्ड ईवेंट भेजें

मैं इस वर्ग का उपयोग कर रहा: माउस

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); 
     } 
    } 
} 

कीबोर्ड

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); 
     } 
    } 
} 

यह मेरा परीक्षण कोड है:

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); 
} 

माउस ले जाता है, लेकिन घ क्लिक न भेजें। कोई उपाय? मैं कुछ समय के लिए दबाए गए कुंजी को कैसे जारी रख सकता हूं? मैंने KeyDown और KeyUp के बीच thread.sleep का उपयोग करने की कोशिश की और यह काम नहीं कर रहा है।

उत्तर

6

वहाँ CodePlex (माइक्रोसॉफ्ट के खुला स्रोत वेबसाइट)

विंडोज इनपुट सिम्युलेटर पर एक ओपन सोर्स प्रोजेक्ट है (सी # SendInput आवरण - कीबोर्ड और माउस अनुकरण)

http://inputsimulator.codeplex.com/

यह उदाहरण और असली सरल है उपयोग करने के लिए।

+3

माउस अभी भी काम नहीं कर रहा है ... – Manu

0

आपका परिभाषाओं Uint32 होना चाहिए:

private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x02; 
private const UInt32 MOUSEEVENTF_ABSOLUTE = 0x8000; 
private const UInt32 MOUSEEVENTF_LEFTUP = 0x04; 
private const UInt32 MOUSEEVENTF_RIGHTDOWN = 0x08; 
private const UInt32 MOUSEEVENTF_RIGHTUP = 0x10; 
संबंधित मुद्दे