善於 調用Windows API

來源:互聯網
上載者:User

標籤:

前一段時間看見別人做的一個自動填寫資訊並且點擊登入的程式,覺得很有意思。

其實就是在程式中調用Windows的API,那麼如何調用,下面就做個簡單的介紹。

寫的簡單粗暴, 不喜輕噴。

 

0、首先引入名稱空間System.Runtime.InteropServices用來匯入Windows DLL.

 

1、下面是函數原型:

  1.1、這是類比滑鼠按下的方法

[DllImport("user32.dll", EntryPoint = "mouse_event")]        public static extern void mouse_event(            int dwFlags,            int dx,            int dy,            int cButtons,            int dwExtraInfo        );

 


  1.2、這是類比按鍵 按下的方法
      

  [DllImport("user32.dll", EntryPoint = "keybd_event")]        public static extern void keybd_event(                byte bVk,         // 虛擬鍵碼                byte bScan,       // 該鍵的硬體掃描碼(一般為0 )                dword dwFlags,    // 函數操作的各個方面的一個標誌位集                dword dwExtralnfo // 與擊鍵相關的附加的32位值        );          

      
       PS: 其中第三個參數有三種取值:

      •     0:按下;
      •     1:擴充鍵;
      •     2:彈起。

 

 

 

3.相關執行個體
      

      const int MOUSEEVENTF_MOVE = 0x0001;      //移動滑鼠         const int MOUSEEVENTF_LEFTDOWN = 0x0002; //類比滑鼠左鍵按下         const int MOUSEEVENTF_LEFTUP = 0x0004; //類比滑鼠左鍵抬起         const int MOUSEEVENTF_RIGHTDOWN = 0x0008; //類比滑鼠右鍵按下         const int MOUSEEVENTF_RIGHTUP = 0x0010; //類比滑鼠右鍵抬起         const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; //類比滑鼠中鍵按下         const int MOUSEEVENTF_MIDDLEUP = 0x0040;// 類比滑鼠中鍵抬起         const int MOUSEEVENTF_ABSOLUTE = 0x8000; //標示是否採用絕對座標


       

 




      

  public Form1()        {            InitializeComponent();            int X = 100;            int Y = 100;            mouse_event( MOUSEEVENTF_RIGHTDOWN, X , Y , 0, 0);            mouse_event(MOUSEEVENTF_RIGHTUP, X , Y, 0, 0);            X += 10;            Y += 65;            mouse_event(MOUSEEVENTF_MOVE, X, Y , 0, 0);            mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y , 0, 0);            mouse_event(MOUSEEVENTF_LEFTUP, X, Y , 0, 0);            keybd_event(65, 0, 0, 0);//a            keybd_event(66, 0, 1, 0);//b            keybd_event(13, 0, 0, 0);//斷行符號        }

 

 4、一個很實用的例子(實現了粘貼複製的功能)

//相當於按下 Ctrl+Ckeybd_event(Convert.ToInt32(System.Windows.Forms.Keys.ControlKey), 0, 0, 0);  //按下Ctrlkeybd_event(Convert.ToInt32(System.Windows.Forms.Keys.C), 0, 0, 0);keybd_event(Convert.ToInt32(System.Windows.Forms.Keys.ControlKey), 0, 0x2, 0);//彈起Ctrl,*******很重要,不然Ctrl會一直處於按下狀態,鍵盤就是失靈,我自己的親身經曆。。
//相當於按下 Ctrl+Vkeybd_event(Convert.ToInt32(System.Windows.Forms.Keys.ControlKey), 0, 0, 0);  //按下Ctrlkeybd_event(Convert.ToInt32(System.Windows.Forms.Keys.V), 0, 0, 0);keybd_event(Convert.ToInt32(System.Windows.Forms.Keys.ControlKey), 0, 0x2, 0);//彈起Ctrl

 

 5、其實Windows API還有很多,這裡只說到了兩種,下面這些也挺常見

  [DllImport("user32.dll")]private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); [DllImport("user32.dll")]private static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")]private static extern IntPtr FindWindow(string lpClassName,string lpWindowName); [DllImport("user32.dll")]private static extern int SendMessage(IntPtr hWnd,int Msg,int wParam,int lParam); [DllImport("user32.dll")]private static extern bool SetCursorPos(int X, int Y);  [DllImport("user32.dll")]private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags);



 

 6、補充一些沒有說到的

     用C#調用Windows API向指定視窗發送按鍵訊息

 

善於 調用Windows API

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.