C# 将按键发送到不显示';t在C中处理Windows消息#

C# 将按键发送到不显示';t在C中处理Windows消息#,c#,handle,keystroke,C#,Handle,Keystroke,当我检测到具有给定颜色的像素时,我想发送键“k”。 问题是,即使该窗口处于活动状态,它也会通过以下代码向我发送一个异常:SendKeys无法在此应用程序内运行,因为该应用程序未处理Windows消息。更改应用程序以处理消息,或者使用SendKeys.SendWait方法。SendWait方法似乎没有足够快地按键(但至少它没有给出任何例外)。我真的不在乎所需的解决方案是否“脏”,它是我将使用一次的poc static void Main(string[] args) { s

当我检测到具有给定颜色的像素时,我想发送键“k”。 问题是,即使该窗口处于活动状态,它也会通过以下代码向我发送一个异常:SendKeys无法在此应用程序内运行,因为该应用程序未处理Windows消息。更改应用程序以处理消息,或者使用SendKeys.SendWait方法。SendWait方法似乎没有足够快地按键(但至少它没有给出任何例外)。我真的不在乎所需的解决方案是否“脏”,它是我将使用一次的poc

static void Main(string[] args)
    {
        string ligne;
        string previousligne = string.Empty;
        int compteur = 0;        
            while (true)
            {
                Color pixColor = Win32.GetPixelColor(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y);
                ligne = pixColor.Name;                    
                if (previousligne != ligne)
                {
                    if (ligne == "ffcecefe")
                    {
                        SendKeys.Send("k");
                    }

                    Console.WriteLine(ligne);
                    System.IO.File.AppendAllText(@"C:\Users\Public\WriteLines.txt", "-----" + DateTime.Now.Minute + ":" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond + " = " + ligne);                        
                    previousligne = ligne;
                    compteur++;
                    if (compteur % 10 == 0)
                    {
                        System.IO.File.AppendAllText(@"C:\Users\Public\WriteLines.txt", "---------" + compteur);
                        Console.WriteLine("---------" + compteur);
                    }
                }
            }
    }
如果你知道最终幻想X,我正在尝试自动化避免闪电的过程:

我可以通过作弊来获得ingame结果(或者用合法的方式),这本应该已经完成了,但是如果我能多学一点C,那就更好了。

控制台窗口(即您正在运行的进程)是活动窗口,
SendKeys
正在向其发送数据。由于控制台没有消息循环,因此没有地方接收消息,消息丢失。您需要使用以下内容激活目标窗口

另见