.NET sendkeys到计算器

下面的sendkeys代码适用于记事本,但它不适用于计算器。 问题是什么? (与我发送的.NET程序中的Sendkeys问题相比,这是另一个问题)

[DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindow(string lpClassName,string lpWindowName); [DllImport("User32")] public static extern bool SetForegroundWindow(IntPtr hWnd); private void button1_Click(object sender, EventArgs e) { IntPtr calculatorHandle = FindWindow("SciCalc", "Calculator"); //IntPtr calculatorHandle = FindWindow("Notepad", "Untitled - Notepad"); if (calculatorHandle == IntPtr.Zero) { MessageBox.Show("Calculator is not running."); return; } SetForegroundWindow(calculatorHandle); System.Threading.Thread.Sleep(1000); SendKeys.SendWait("111*11="); //SendKeys.SendWait("{ENTER}"); //cnt++; SendKeys.Flush(); } 

我会告诉你如何弄清楚如何将keystorkes发送到calc.exe。

使用spy ++来监视calc.exe窗口进程中的消息。 要执行此操作,请进入spy ++并单击日志消息工具栏按钮。 将光标拖到calc.exe窗口。 我给出的说明适用于VS2008,对于其他VS版本中包含的Spy ++,它们可能略有不同。 但是始终可以使用相同的function。

您将在输入文本时确切地看到发送的消息。 你需要做同样的事情。

将Win32 API SendMessage ,LPARAM和WPARAM用于找到的窗口句柄。

我想我遇到了问题。 时间是这里的问题。 只要我把sleep()b / w发送命令,calc.exe就可以了。 虽然这不是一个好的解决方案。

在Windows 7上,您必须这样做:

 IntPtr calculatorHandle = FindWindow("CalcFrame", "Calculator");