首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cursor.Postition和Mouse_Event被阻塞

Cursor.Postition和Mouse_Event被阻塞
EN

Stack Overflow用户
提问于 2014-05-28 19:56:08
回答 1查看 894关注 0票数 1

我正在开发一个应用程序来自动化另一个应用程序的一些输入。我遇到了一个问题。下面是我使用的函数代码

代码语言:javascript
复制
public class MouseClick
{
    [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
    public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
}

public enum MouseButton
{
    MOUSEEVENTF_LEFTDOWN = 0x02,
    MOUSEEVENTF_LEFTUP = 0x04,
    MOUSEEVENTF_RIGHTDOWN = 0x08,
    MOUSEEVENTF_RIGHTUP = 0x10
}

下面是我用来移动和点击的代码

代码语言:javascript
复制
Point LocPoint = GetLocation(Column, Row, Item);
Console.WriteLine("Column: {0}\tRow: {1}\tItem: {2}\tPoints: {3}\tCursor: {4}", Column, Row, Item, Points, LocPoint.X + "," + LocPoint.Y);

Thread.Sleep(200);
Cursor.Position = LocPoint;
Thread.Sleep(10);

MouseClick.mouse_event((int)MouseButton.MOUSEEVENTF_LEFTDOWN | (int)MouseButton.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Thread.Sleep(200);

然而,当我没有想要作为活动窗口输入的应用程序时,这里的事情变得有趣了,但是假设mspaint代码运行得很好,我想点击的画笔上有点,但是当我想要运行的应用程序是活动的时,鼠标就不会移动,也不会注册单击,就好像应用程序正在拦截这些调用并忽略它们一样。这就引出了两个问题

  1. 这个是可能的吗?它如何检测鼠标和设置线绳之间的差异?
  2. 有什么方法可以绕过这种或那种方法吗?

好的,所以每个人都告诉我用SendInput代替。好的,我更改了代码以使用SendInput。我也尝试过C# SendKeys作为测试。目前,我已经回到了basic,我只是尝试将字母A输入到一个文本输入框中,然后手动完成目标。当我在记事本上运行它时,SendInput和SendKeys都输入字母A,但是当我在另一个应用程序中时,我试图将它自动化,结果没有显示出来。这是我正在使用的SendInput代码。

代码语言:javascript
复制
INPUT[] Inputs = new INPUT[2];
Inputs[0].type = WindowsAPI.INPUT_KEYBOARD;
Inputs[0].ki.wVk = 0;
Inputs[0].ki.dwFlags = WindowsAPI.KEYEVENTF_UNICODE;
Inputs[0].ki.wScan = 0x41;

Inputs[0].type = WindowsAPI.INPUT_KEYBOARD;
Inputs[0].ki.wVk = 0;
Inputs[1].ki.dwFlags = WindowsAPI.KEYEVENTF_KEYUP;
Inputs[0].ki.wScan = 0x41;

WindowsAPI.SendInput((uint)Inputs.Length, Inputs, Marshal.SizeOf(Inputs[0]));
EN

回答 1

Stack Overflow用户

发布于 2014-05-29 15:31:23

因此,在经历了挫折之后,我决定在Visual调试模式之外运行这个应用程序,这导致了相同的结果--什么也没有。然而,我决定运行应用程序“作为管理员”,即使通过我已经关闭所有UAC和令我惊讶的是,应用程序正确地移动鼠标,点击和输入的文本。我不知道为什么需要这样做,因为我以前已经调用过方法,而且从来没有这样做过,但是这似乎是解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23920718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档