Как отправить нажатия клавиш в автоматизацию пользовательского интерфейса приложения -C#

Мне нужно выяснить автоматизацию для значений клавиатуры? Как отправить нажатия клавиш для автоматизации пользовательского интерфейса приложения? Мне нужно автоматизировать функции вверх и вниз страницы на клавиатуре. Каков наилучший способ сделать это?

РЕДАКТИРОВАТЬ: в моем приложении, следуя процессу. Предположим, что конечный пользователь открывает документ MS Word с 5 страницами, и он нажимает кнопки перемещения вверх и вниз для перемещения по этим страницам. Я хочу автоматизировать этот сценарий с помощью C#. В настоящее время я использую UIAutomationClient.dll и UIAutomationTypes.dll. Могу ли я использовать их?

5 ответов

Решение

В этом сценарии получить слово документа на первый план, а затем использовать на экране клавиатуры
System.Diagnostics.Process.Start("osk.exe");и нажимайте кнопки "вверх" и "вниз" с помощью мыши, поскольку для щелчка мышью нужны экранные координаты для кнопки "вверх" и "вниз".

(Я попытался обнаружить на экране клавиатуру с помощью автоматизации пользовательского интерфейса. Но он не обнаружил клавиши экрана. https://stackru.com/questions/11077738/windows-sdk-inspect-tool-what-are-the-reasons-on-screen-keyboard-does-not-disp не может найти решение для этой проблемы. поэтому из-за этого я использую этот метод click click, чтобы нажать кнопку.)

Очень хорошим способом автоматической отправки всех видов нажатий клавиш является язык автоматизации и сценариев AutoIt. С этим можно многое сделать, особенно отправка страниц вверх и страниц вниз.

Я предлагаю написать EXE с autoit, который подключается к программе, в которую он посылает нажатия клавиш.

  1. Активируйте окно приложения, используя P/Invoke.
  2. Вызов SendWait("C") с любым персонажем.

Например

// Get a handle to an application window.
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

// Activate an application window.
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

// Send a series of key presses to the Calculator application. 
private void button1_Click(object sender, EventArgs e)
 {
    // Get a handle to the Calculator application. The window class 
    // and window name were obtained using the Spy++ tool.
    IntPtr calculatorHandle = FindWindow("CalcFrame","Calculator");

    // Verify that Calculator is a running process. 
    if (calculatorHandle == IntPtr.Zero)
    {
        MessageBox.Show("Calculator is not running.");
        return;
    }

    // Make Calculator the foreground application and send it  
    // a set of calculations.
    SetForegroundWindow(calculatorHandle);
    SendKeys.SendWait("111");
    SendKeys.SendWait("*");
    SendKeys.SendWait("11");
    SendKeys.SendWait("=");
}

См. Как: имитировать события мыши и клавиатуры в коде > "Чтобы отправить нажатие клавиши в другое приложение"

Читали ли вы, как отправлять ключи вместо символов в процесс?

Это точно говорит вам, как отправить ключи в приложение.

Я думаю, что вы хотите отправить нажатия клавиш в приложение, для которого у вас нет исходного кода.
Я не могу помочь вам рассказать, как сделать это прямо в C#.
Но вы можете сделать это очень легко с AutoIt; у него есть DLL, на которую вы можете ссылаться в C#, чтобы делать именно то, что вам нужно.

// использовать форму Windows и использовать этот список с ключом отправки https://www.autoitscript.com/autoit3/docs/appendix/SendKeys.htm Я почти уверен, что он просто запрашивает значения ключей для своего SendKey.Send("{}");

Другие вопросы по тегам