如何在宏的坐标上保持检查颜色?

时间:2018-09-22 02:43:43

标签: c# macros

我要在按开始按钮后直接保持坐标上的颜色并在我按停止按钮时停止,这对我来说就像是宏,但是当我按开始按钮时,什么也没发生,所以我根本不需要从键盘上按S按钮在条件为true时按住S按钮,这里是我的代码

using Eyedropper;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace macro
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Bitmap m_ScreenImage;

        private void btnstart_Click(object sender, EventArgs e)
        {
            while (m_ScreenImage.GetPixel(1002, 109).ToString() == "Color [A=255, R=55, G=114, B=173]")
            {

                m_ScreenImage = Utility.CaptureScreen();
                SendKeys.Send("s");
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

不确定您要做什么,但是会给您一些指点

这是一次巨大的内存泄漏,并且耗尽了 GDI 资源

m_ScreenImage = Utility.CaptureScreen();

您应该处置Bitmaps

m_ScreenImage?.Dispose();
m_ScreenImage = Utility.CaptureScreen();

这是一种非常漫长的检查像素颜色的方法。

m_ScreenImage.GetPixel(1002, 109).ToString() == "Color [A=255, R=55, G=114, B=173]"

最好存储所需的颜色,然后将其与GetPixel返回的颜色进行比较

FromArgb(Int32, Int32, Int32, Int32)

  

根据四个ARGB分量(alpha,红色,   绿色和蓝色)值。尽管此方法允许使用32位值   传递给每个组件,每个组件的值是有限的   到8位。

public Color targetColor = Color.FromArgb(255, 55, 114, 173);

...

while (m_ScreenImage.GetPixel(1002, 109) == targetColor)
{ ... }

关于您的发送密钥为何不起作用的原因,我不确定

但是,我的感觉是你陷入了无休止的循环。