Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中,在非活动窗口的某个位置模拟鼠标单击#_C#_Visual Studio 2010 - Fatal编程技术网

C# 在C语言中,在非活动窗口的某个位置模拟鼠标单击#

C# 在C语言中,在非活动窗口的某个位置模拟鼠标单击#,c#,visual-studio-2010,C#,Visual Studio 2010,这是最初的问题,但java认为: 不管怎样,我正在构建一个在后台运行的机器人。这个机器人需要我点击。当然,我希望能够在机器人运行时做其他事情 所以我想知道是否有可能在非活动窗口的某个位置模拟鼠标点击 如果这是可能的,如果你们中的任何人能帮助我,我将不胜感激 谢谢 是的,这是可能的,以下是我以前在学校项目中使用的代码: [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern void mouse_

这是最初的问题,但java认为:

不管怎样,我正在构建一个在后台运行的机器人。这个机器人需要我点击。当然,我希望能够在机器人运行时做其他事情

所以我想知道是否有可能在非活动窗口的某个位置模拟鼠标点击

如果这是可能的,如果你们中的任何人能帮助我,我将不胜感激


谢谢

是的,这是可能的,以下是我以前在学校项目中使用的代码:

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;
public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
public const int MOUSEEVENTF_RIGHTUP = 0x10;

//This simulates a left mouse click
public static void LeftMouseClick(Point position)
{
    Cursor.Position = position;
    mouse_event(MOUSEEVENTF_LEFTDOWN, position.X, position.Y, 0, 0);
    mouse_event(MOUSEEVENTF_LEFTUP, position.X, position.Y, 0, 0);
}

编辑:该函数似乎已被替换,但仍然有效(Windows 7及更早版本)

理想情况下,您应该使用
SendInput
,但这需要输入焦点。否则,您将不得不用
PostMessage
试试运气。为什么不使用UIAutomation而不是伪造输入?这个答案只是一个想法@DavidHeffernan你可以记住鼠标位置的全局坐标,并在动作后恢复它,也可以恢复焦点。好的,你会失去焦点,但会持续一毫秒。但是这个方法可以改变全屏视图的状态,比如游戏或者类似的东西。我认为这是一个很好的选择做一个小窗口,属性“始终在顶部”,然后在那里做。例如,如果是针对web,您可以使用web浏览器自动滚动它,然后单击所需内容。这要求目标窗口具有输入焦点。
鼠标事件
非常好,它相当于
发送输入
,但更容易驾驶。@DavidHeffernan很抱歉我误读了他的问题,但是,这甚至可以在不处于活动状态的情况下单击吗?另外,您是否知道为什么要替换此功能?我在MSDN页面上没有找到具体信息。
SendInput
是一个更通用的灵活功能<保留代码>鼠标事件和
keybd\u事件
,以便与旧软件兼容。我认为没有理由停止使用
鼠标事件
。您可以将Windows消息发布到非活动的Windows,有时还可以成功伪造输入。然而,在伪造输入之前,我会先查看UIautomation。