(轉)C#模擬鍵盤鼠標事件

原文html

1.模擬鍵盤事件
System.Windows.Forms.SendKeys
如下是   SendKeys   的一些特殊鍵代碼表。   
  鍵   代碼     
  BACKSPACE   {BACKSPACE}、{BS}   或   {BKSP}     
  BREAK   {BREAK}     
  CAPS   LOCK   {CAPSLOCK}     
  DEL   或   DELETE   {DELETE}   或   {DEL}     
  DOWN   ARROW(下箭頭鍵)   {DOWN}     
  END   {END}     
  ENTER   {ENTER}   或   ~     
  ESC   {ESC}     
  HELP   {HELP}     
  HOME   {HOME}     
  INS   或   INSERT   {INSERT}   或   {INS}     
  LEFT   ARROW(左箭頭鍵)   {LEFT}     
  NUM   LOCK   {NUMLOCK}     
  PAGE   DOWN   {PGDN}     
  PAGE   UP   {PGUP}     
  PRINT   SCREEN   {PRTSC}(保留,以備未來使用)     
  RIGHT   ARROW(右箭頭鍵)   {RIGHT}     
  SCROLL   LOCK   {SCROLLLOCK}     
  TAB   {TAB}     
  UP   ARROW(上箭頭鍵)   {UP}     
  F1   {F1}     
  F2   {F2}     
  F3   {F3}     
  F4   {F4}     
  F5   {F5}     
  F6   {F6}     
  F7   {F7}     
  F8   {F8}     
  F9   {F9}     
  F10   {F10}     
  F11   {F11}     
  F12   {F12}     
  F13   {F13}     
  F14   {F14}     
  F15   {F15}     
  F16   {F16}     
  數字
鍵盤加號   {ADD}     
  數字鍵盤減號   {SUBTRACT}     
  數字鍵盤乘號   {MULTIPLY}     
  
數字鍵盤除號   {DIVIDE}     
    
  若要指定與   SHIFT、CTRL   和   ALT   鍵的任意組合一塊兒使用的鍵,請在這些鍵代碼以前加上如下一個或多個代碼:   
    
  鍵   代碼     
  SHIFT   +     (SHIFT="+") 
  CTRL   ^     (CTRL="^") 若是輸入
  ALT   %     

函數

private void button1_Click(object sender, System.EventArgs e)

        {//英文輸入
            this.richTextBox1.Focus();                                            
            for(int i=65;i<91;i++)
            {
                char Letter=(char)i;
                SendKeys.Send(Letter.ToString());
                System.Threading.Thread.Sleep(100);        
                SendKeys.Flush();
            }        
            for(int i=97;i<123;i++)
            {
                char Letter=(char)i;
                SendKeys.Send(Letter.ToString());
                System.Threading.Thread.Sleep(100);
                SendKeys.Flush();
            }        
        }
 
        private void button3_Click(object sender, System.EventArgs e)
        {//數字輸入
            this.richTextBox1.Focus();                                            
            for(int i=0;i<10;i++)
            {                
                SendKeys.Send(i.ToString());
                System.Threading.Thread.Sleep(100);        
                SendKeys.Flush();
            }                
        }
 
        private void button4_Click(object sender, System.EventArgs e)
        {//Backspace
            this.richTextBox1.Focus();
            SendKeys.Send("{Backspace}");        
        }
 
        private void button5_Click(object sender, System.EventArgs e)
        {//Home
            this.richTextBox1.Focus();
            SendKeys.Send("{Home}");                
        }
 
        private void button6_Click(object sender, System.EventArgs e)
        {//End
            this.richTextBox1.Focus();
            SendKeys.Send("{End}");        
        }
 
        private void button7_Click(object sender, System.EventArgs e)
        {//Enter
            this.richTextBox1.Focus();
            SendKeys.Send("{Enter}");        
        }
 
        private void button8_Click(object sender, System.EventArgs e)
        {//Delete
            this.richTextBox1.Focus();
            SendKeys.Send("{Delete}");        
        }
 
        private void button2_Click(object sender, System.EventArgs e)
        {//Shift+Home
            this.richTextBox1.Focus();
            SendKeys.Send("+{Home}");                
        }
 
        private void button9_Click(object sender, System.EventArgs e)
        {//Shift+End
            this.richTextBox1.Focus();
            SendKeys.Send("+{End}");                
}

 

  

 

 

 看下方法的說明
public class SendKeys : System.Object
    System.Windows.Forms 的成員
 
摘要:
 提供將鍵擊發送到應用程序的方法。  

 

public static void Send ( System.String keys )
    System.Windows.Forms.SendKeys 的成員
 
摘要:
 向活動應用程序發送擊鍵。  

 

public static void Sleep ( System.TimeSpan timeout )
    System.Threading.Thread 的成員
 
摘要:

將當前線程阻塞指定的時間。post

 

public static void Flush ( )
    System.Windows.Forms.SendKeys 的成員
 
2.模擬鼠標
有時,咱們需在咱們的程序中模擬鼠標的移動、點擊等動做。——好比,一個再現用戶操做的宏,或者一個演示操做方法的Demo程序。那麼,咱們在.Net中如何實現呢?

.Net並無提供改變鼠標指針位置、模擬點擊操做的函數;可是Windows API提供了。其中一個是:
        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int X, int Y);  

該函數能夠改變鼠標指針的位置。其中X,Y是相對於屏幕左上角的絕對位置。
另外一個函數是:

        [DllImport("user32.dll")]
        static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);

這個函數不只能夠設置鼠標指針絕對的位置,並且能夠以相對座標來設置。另外,該函數還能夠模擬鼠標左右鍵點擊、鼠標滾輪操做等。其中的MouseEventFlag是一個基於uint類型的枚舉,定義以下:

        [Flags]
        enum MouseEventFlag : uint
        {
            Move        = 0x0001,
            LeftDown    = 0x0002,
            LeftUp      = 0x0004,
            RightDown   = 0x0008,
            RightUp     = 0x0010,
            MiddleDown  = 0x0020,
            MiddleUp    = 0x0040,
            XDown       = 0x0080,
            XUp         = 0x0100,
            Wheel       = 0x0800,
            VirtualDesk = 0x4000,
            Absolute    = 0x8000
        }

關於這兩個函數的詳細說明,能夠查看MSDN Library或者Windows的Platform SDK文檔。
下面的演示程序(完整版源代碼,VS.Net 2005/C#)演示了使用上面的函數,控制鼠標移動到任務欄並點擊「開始」按鈕的方法。
(該程序使用了FindWindowEx等API函數來查找任務欄及開始菜單)
點這裏下載
相關文章
相關標籤/搜索