zoukankan      html  css  js  c++  java
  • 善于 调用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向指定窗口发送按键消息

  • 相关阅读:
    Discovery Scanning
    Openvas
    Common Vulnerability Scoring System CVSS
    NIagara Workbench ( 温度控制)
    Nikto and whatweb
    Jace Config
    Active information gathering-services enumeration
    Intsall The Nessus in you kali linux
    Source Code Review
    Niagara workbench (Basic )
  • 原文地址:https://www.cnblogs.com/Percy_Lee/p/4847336.html
Copyright © 2011-2022 走看看