Отправка нажатия клавиши в активное окно, которое не обрабатывает сообщение Windows на C #

Когда я обнаруживаю пиксель с заданным цветом, я хочу отправить ключ «k». Проблема в том, что, хотя окно активно, со следующим кодом оно отправляет мне исключение: SendKeys не может работать внутри этого приложения, потому что приложение не обрабатывает сообщения Windows. Либо измените приложение для обработки сообщений, либо используйте метод SendKeys.SendWait. Похоже, что метод Sendwait нажимает клавишу недостаточно быстро (но, по крайней мере, не вызывает исключений). Меня действительно не волнует, является ли требуемое решение «грязным», я использую его один раз.

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);
                    }
                }
            }
    }

Если вы знаете Final Fantasy X, я пытаюсь автоматизировать процесс ухода от молний: видео

Я мог бы просто обмануть, чтобы получить результат в игре (или сделать это законным способом), и это уже было бы сделано, но если бы я мог узнать немного больше о C # вместо этого, было бы лучше.


person nivolas    schedule 18.08.2015    source источник


Ответы (1)


Окно консоли (т.е. ваш запущенный процесс) - это активное окно, в которое SendKeys отправляет данные. Поскольку в консоли нет цикла сообщений, сообщение некуда будет принято, и оно потеряно. Вам нужно будет активировать целевое окно с помощью чего-то вроде _ 2_.

См. Также Как отправлять нажатия клавиш в окно, не активируя его с помощью Windows API?

person theB    schedule 18.08.2015