4

下面的 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();
}
4

3 回答 3

8

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

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

当您输入文本时,您将准确看到发送了哪些消息。你需要做同样的事情。

使用 Win32 API SendMessage、 LPARAM 和 WPARAM 到您找到的窗口句柄。

于 2010-04-09T03:19:36.447 回答
0

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

于 2010-04-09T03:30:03.193 回答
0

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

IntPtr calculatorHandle = FindWindow("CalcFrame", "Calculator");
于 2010-04-09T03:31:26.640 回答