读书人

C# 模拟鼠标 键盘 的有关问题

发布时间: 2013-08-01 15:23:18 作者: rapoo

C# 模拟鼠标 键盘 的问题
最近想偷懒 批量下载一些东西 用C#启动一个软件 然后模拟鼠标单击里边的新建按钮,我的思路是:那个软件启动后在屏幕上的位置是固定的,我得到那个按钮的坐标,然后把鼠标移动到上边 模拟单击。以下是我写的,但是好像只是定位成功了,单击没有效果。
请问各位前辈,这是因为窗口句柄的问题? 是因为当前的单击是作用于正在运行的Form1,根本没有操作我启动的那个软件?可是我启动那个软件之后,它就在最前端了啊?
以下是我已经写得,如果前辈要调试可以用QQ作替换
using System.Runtime.InteropServices;

[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")]
protected static extern IntPtr FindWindow(char[] lpClassName, char[] lpWindowName);

[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern bool SetForegroundWindow(IntPtr hwnd);




[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


}


private void button1_Click(object sender, EventArgs e)
{
Process executeTask = new Process();
executeTask.StartInfo.FileName = "D:\\硕鼠\\nano.exe";
executeTask.Start();

int x, y;
x = 882;
y = 216;
SetCursorPos(x, y);
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);


}
[解决办法]
mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);

读书人网 >C#

热点推荐