如何将击键发送到应用程序UI自动化-C#
我需要找出键盘值的automationid?如何将按键发送到应用程序UI自动化?我需要在键盘上自动翻页和翻页功能。最好的方法是什么 是吗 编辑:如何将击键发送到应用程序UI自动化-C#,c#,c#-4.0,automation,C#,C# 4.0,Automation,我需要找出键盘值的automationid?如何将按键发送到应用程序UI自动化?我需要在键盘上自动翻页和翻页功能。最好的方法是什么 是吗 编辑: 在我的申请中遵循以下流程。假设最终用户打开有5页的MS Word文档,并按下向上翻页和向下翻页按钮在这些页面内移动。我想使用c#自动化这个场景。目前我已使用UIAutomationClient.dll和UIAutomationTypes.dll。我可以使用这些吗?我认为您希望向没有源代码的应用程序发送击键。 我不能帮你直接用C#告诉你怎么做。 但是,你
在我的申请中遵循以下流程。假设最终用户打开有5页的MS Word文档,并按下向上翻页和向下翻页按钮在这些页面内移动。我想使用c#自动化这个场景。目前我已使用UIAutomationClient.dll和UIAutomationTypes.dll。我可以使用这些吗?我认为您希望向没有源代码的应用程序发送击键。
我不能帮你直接用C#告诉你怎么做。
但是,你可以很容易地做到这一点;它有一个DLL,您可以在C#中引用,以完全满足您的需要。自动发送各种击键的一个非常好的方法是。很多事情都可以用它来完成,尤其是向上翻页和向下翻页发送 我建议使用autoit编写一个EXE,它将自身连接到它将向其发送击键的程序。您读过吗
这将准确地告诉您如何向应用程序发送键。在这种情况下,将word文档置于前端,然后在屏幕键盘上使用
System.Diagnostics.Process.Start(“osk.exe”)代码>并使用鼠标输入单击页面上下按钮
因为对于鼠标点击需要屏幕坐标为页面上下按钮
(我试图用UI自动化检测屏幕上的键盘,但它没有检测到屏幕上的按键。
无法找到此问题的解决方案。因此,我使用此“移动-单击”方法单击按钮。)
使用P/Invoke激活应用程序的窗口李>
使用任意字符调用SendWait(“C”)
例如
请参阅>“向其他应用程序发送击键”//
使用windows窗体并将此列表与发送键一起使用
我很确定他只是在为他的SendKey.Send(“{}”)请求键的值 @Sirwani与此无关。他不是要在外部应用程序上模拟击键。请尝试对SetForeGroundIndow和SendKeys的WinApi调用组合。我已经尝试过这个方法。但为此我需要自动识别@YoryeNathan我需要自动化。我已经编辑了我的问题。请检查。Thanx无法100%确定您的意思是击键(即模拟键盘上的按键)还是按键按压(即模拟鼠标点击按钮)。对于第一种方法,您不需要AutomationId,对于后者,这是一种方法-因为对于鼠标单击,您需要屏幕坐标,然后您可以使用获得的AutomationElement的ClickablePoint。首先,使用SendKeys.Send.AutoIt可以做到这一点!但是C#不是必需的,因为您可以自己编译AutoIt脚本。您可以在C#中使用它。。。但有时不需要,在SetForegroundWindow调用之后和发送密钥之前,使用Thread.Sleep(100)添加时间延迟将非常有用。请发布构造的答案,然后提交参考。
// 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("=");
}