【问题标题】:.NET sendkeys to calculator.NET 向计算器发送密钥
【发布时间】:2010-04-09 03:12:25
【问题描述】:

下面的 sendkeys 代码适用于记事本,但不适用于计算器。问题是什么? (与我在这里发的Sendkeys problem from .NET program相比,这是另一个问题)

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

【问题讨论】:

    标签: c# sendkeys


    【解决方案1】:

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

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

    您将在输入文本时准确看到发送的消息。你也需要这样做。

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

    【讨论】:

    • 我将支持使用 SendMessage 而不是 SendKeys。您可以在这里找到相关信息:msdn.microsoft.com/en-us/library/ms646280
    • SendKeys 不只是一个 SendMessage 包装器吗?
    • @Adam:可能但不确定。我想我的建议是,除了键之外,您可能还需要执行一些其他命令。但无论是什么,你都可以通过查看消息来弄清楚。
    • 对于通过 Google 找到此主题的任何人,我在这里也有相关帖子:stackoverflow.com/questions/3047375/simulating-key-press-c/…
    【解决方案2】:

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

    【讨论】:

    • @user203123:你在哪里睡觉?
    • 您发布的代码(我必须将“SciCalc”更改为“CalcFrame”,因为我在 Win7 上)对我来说效果很好。输出为“1221”。
    【解决方案3】:

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

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

    【讨论】:

    • 但根据您刚刚发布的内容,我猜您的问题不在于获取窗口句柄
    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2011-12-02
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多