c#使用API进行模拟鼠标点击 底层操作同样简单
来源:互联网 发布:mysql 自动增长 不好使 编辑:程序博客网 时间:2024/05/17 01:45
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace SimulateMouse
{
public partial class DemoForm : Form
{
[StructLayout(LayoutKind.Sequential)]
struct NativeRECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[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
}
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
[DllImport("user32.dll")]
static extern IntPtr FindWindow(string strClass, string strWindow);
[DllImport("user32.dll")]
static extern IntPtr FindWindowEx(HandleRef hwndParent, HandleRef hwndChildAfter, string strClass, string strWindow);
[DllImport("user32.dll")]
static extern bool GetWindowRect(HandleRef hwnd, out NativeRECT rect);
const int AnimationCount = 800;
private Point endPosition;
private int count;
public DemoForm()
{
InitializeComponent();
}
private void btnStart_Click(object sender, EventArgs e)
{
NativeRECT rect;
IntPtr ptrTaskbar = FindWindow("Shell_TrayWnd", null);
if (ptrTaskbar == IntPtr.Zero)
{
MessageBox.Show("No taskbar found.");
return;
}
IntPtr ptrStartBtn = FindWindowEx(new HandleRef(this, ptrTaskbar), new HandleRef(this, IntPtr.Zero), "Button", null);
if (ptrStartBtn == IntPtr.Zero)
{
MessageBox.Show("No start button found.");
return;
}
GetWindowRect(new HandleRef(this, ptrStartBtn), out rect);
endPosition.X = (rect.left + rect.right) / 2;
endPosition.Y = (rect.top + rect.bottom) / 2;
if (chkAnimation.Checked)
{
this.count = AnimationCount;
movementTimer.Start();
}
else
{
SetCursorPos(endPosition.X, endPosition.Y);
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
}
}
private void movementTimer_Tick(object sender, EventArgs e)
{
int stepx = (endPosition.X - MousePosition.X) / count;
int stepy = (endPosition.Y - MousePosition.Y) / count;
count--;
if (count == 0)
{
movementTimer.Stop();
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
}
tbCursor.Text = String.Format("({0}, {1})", MousePosition.X, MousePosition.Y);
mouse_event(MouseEventFlag.Move, stepx, stepy, 0, UIntPtr.Zero);
}
}
}
- c#使用API进行模拟鼠标点击 底层操作同样简单
- c# 模拟鼠标点击
- C# 模拟鼠标操作
- C#模拟鼠标操作
- C# 模拟鼠标点击事件
- 使用powershell/vbs自动化模拟鼠标点击操作
- c# api模拟鼠标活动
- c#模拟鼠标键盘操作
- c#模拟鼠标键盘操作
- c#模拟鼠标键盘操作
- c#模拟鼠标键盘操作
- c#模拟鼠标键盘操作
- C# 模拟 鼠标 键盘操作
- 使用API模拟鼠标事件
- c# 键盘模拟点击 鼠标模拟点击 .net2.0库
- 简单模拟鼠标键盘操作
- C# 模拟鼠标点击别的程序按钮
- C# 模拟鼠标移动与点击
- GridView动态加载列
- 清明节--我思念父亲
- OpenJweb平台中acegi的配置
- 四个软件一起设计,一起出炉的设计方案
- SQL复制中,订阅存在服务器上的过期时间设置
- c#使用API进行模拟鼠标点击 底层操作同样简单
- visual fortran 中EDIT文本框的输入
- java字符串全排列问题(经典)
- XML与Web数据挖掘
- 博客在六个方面降低网络营销费用
- 中国移动笔试题——转自MOP
- event.keycode值大全
- C++好网站及其他网站收录
- Web1.0