gpt4 book ai didi

c# - 自动鼠标点击屏幕

转载 作者:可可西里 更新时间:2023-11-01 09:48:21 25 4
gpt4 key购买 nike

我正在寻找一种创建程序的方法,该程序将在屏幕上找到特定颜色的地方执行鼠标单击。

例如,如果屏幕上有一个红色框,我希望程序点击它中心的红色框。

我如何在 C# 中完成此操作?

最佳答案

因为你只想要一个通用的方式,我并没有真正做到完美,但这是想法:

有一个截屏的方法:

public Bitmap ScreenShot()
{
var screenShot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height,
PixelFormat.Format32bppArgb);

using (var g = Graphics.FromImage(screenShot))
{
g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
}

return screenShot;
}

以及在位图中查找特定颜色的方法:请注意,可以使用不安全代码和 LockBits(阅读 herehere)大幅改进此实现。

public Point? GetFirstPixel(Bitmap bitmap, Color color)
{
for (var y = 0; y < bitmap.Height; y++)
{
for (var x = 0; x < bitmap.Width; x++)
{
if (bitmap.GetPixel(x, y).Equals(color))
{
return new Point(x, y);
}
}
}

return null;
}

您需要的另一种方法是单击某个点:

[DllImport("user32.dll",
CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
private static extern void mouse_event(long dwFlags,
long dx,
long dy,
long cButtons,
long dwExtraInfo);

private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;

public void Click(Point pt)
{
Cursor.Position = pt;
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, pt.X, pt.Y, 0, 0);
}

最后,总结一下:

public bool ClickOnFirstPixel(Color color)
{
var pt = GetFirstPixel(ScreenShot(), color);

if (pt.HasValue)
{
Click(pt.Value);
}

// return whether found pixel and clicked it
return pt.HasValue;
}

那么,用法就是:

if (ClickOnFirstPixel(Color.Red))
{
Console.WriteLine("Found a red pixel and clicked it!");
}
else
{
Console.WriteLine("Didn't find a red pixel, didn't click.");
}

关于c# - 自动鼠标点击屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10870303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com