当我检测到具有给定颜色的像素时,我想发送密钥“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,我正在尝试自动化避免闪电的过程:video
我可以欺骗得到游戏结果(或者以合法的方式做)并且它已经完成了,但如果我能学到更多的C#而不是更好。
控制台窗口(即您的运行进程)是SendKeys
正在向其发送数据的活动窗口。由于控制台没有消息循环,因此无法接收消息,并且丢失了消息。您需要使用SetActiveWindow()
之类的东西激活目标窗口。
另见How do I send key strokes to a window without having to activate it using Windows API?