善于 调用Windows API

前一段时间看见别人做的一个自动填写信息并且点击登录的程序,觉得很有意思。

其实就是在程序中调用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+C
keybd_event(Convert.ToInt32(System.Windows.Forms.Keys.ControlKey), 0, 0, 0);  //按下Ctrl
keybd_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+V
keybd_event(Convert.ToInt32(System.Windows.Forms.Keys.ControlKey), 0, 0, 0);  //按下Ctrl
keybd_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向指定窗口发送按键消息

原文地址:https://www.cnblogs.com/Percy_Lee/p/4847336.html