Как отправить нажатия клавиш в автоматизацию пользовательского интерфейса приложения -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, который подключается к программе, в которую он посылает нажатия клавиш.
- Активируйте окно приложения, используя P/Invoke.
- Вызов
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("{}");