.NET sendkeys для калькулятора - PullRequest
3 голосов
/ 09 апреля 2010

Код sendkeys ниже хорошо работает для Блокнота, но не работает для Калькулятора. В чем проблема? (Это другая проблема по сравнению с тем, что я отправил здесь Проблема Sendkeys из программы .NET )

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

Ответы [ 3 ]

7 голосов
/ 09 апреля 2010

Я расскажу вам, как вы можете выяснить, как отправить keystorkes в calc.exe.

Используйте spy ++ для отслеживания сообщений в процессе окна calc.exe, когда вы его используете. Для этого перейдите в spy ++ и нажмите кнопку на панели инструментов журнала сообщений. Перетащите курсор в окно calc.exe. Инструкции, которые я дал для VS2008, могут немного отличаться для Spy ++, включенного в другие версии VS. Но одна и та же функциональность всегда была доступна.

Вы увидите, какие именно сообщения отправляются при вводе текста. Вы должны сделать то же самое.

Используйте Win32 API SendMessage , LPARAM и WPARAM для вашего дескриптора найденного окна.

0 голосов
/ 09 апреля 2010

В Windows 7 вы должны сделать это:

IntPtr calculatorHandle = FindWindow("CalcFrame", "Calculator");
0 голосов
/ 09 апреля 2010

Думаю, у меня проблема. Сроки здесь проблема. Пока я помещаю ч / б команду отправки (ч / б), calc.exe все делает правильно. Это не очень хорошее решение.

...