前一段时间看见别人做的一个自动填写信息并且点击登录的程序,觉得很有意思。
其实就是在程序中调用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向指定窗口发送按键消息
时间: 2024-10-12 19:53:24