在c#中向活动窗口发送一个按键,该窗口不处理Windows消息

本文关键字:窗口 一个 Windows 处理 消息 活动 | 更新日期: 2023-09-27 18:08:28

当我检测给定颜色的像素时,我想发送键"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》,我正在尝试自动避免闪电的过程:视频

我可以通过作弊来获得游戏内的结果(或者以合法的方式),这可能已经完成了,但如果我能学习更多的c#知识,那就更好了。

在c#中向活动窗口发送一个按键,该窗口不处理Windows消息

控制台窗口(即您正在运行的进程)是SendKeys发送数据的活动窗口。由于控制台没有消息循环,因此没有任何地方可以接收消息,因此消息会丢失。您需要使用类似SetActiveWindow()的东西来激活目标窗口。

参见我如何发送按键到一个窗口,而不必使用Windows API激活它?