【问题标题】:How to keep check color on Coordinates for macro?如何在宏的坐标上保持检查颜色?
【发布时间】:2018-09-22 02:43:42
【问题描述】:

我想在按下开始按钮后直接检查坐标上的颜色,当我按下停止按钮时停止,这对我来说就像宏但是当我按下开始按钮时没有任何反应,我根本不需要从键盘按下 S 按钮在条件为真时保持按下 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");
            }
        }
    }
}

【问题讨论】:

  • 您能否编辑问题,以便读者了解您在说什么。阅读这个问题,我不明白“检查颜色”、“坐标”、“开始”、“停止”和“S”按钮是什么,以及“宏”如何融入其中。从您的代码来看,您似乎正在编写一个 Windows 窗体桌面应用程序(您应该这样标记它)。除此之外,我有点茫然。

标签: c# macros


【解决方案1】:

不完全确定你要做什么,但我会给你一些指示

这是导致巨大内存泄漏和 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、red、 绿色和蓝色)值。虽然这种方法允许一个 32 位的值 为每个组件传递,每个组件的值是有限的 到 8 位。

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

...

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

至于为什么您的发送密钥不起作用,嗯,我不确定。然而,我的感觉是你只是陷入了一个无限循环。

【讨论】:

  • 感谢回复是的,我陷入了无限循环,这个循环不会停止,直到按下按钮停止才会停止,发送密钥怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 2016-01-09
  • 2020-05-19
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多