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

キーストロークを 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 に答える