我需要找出关键板值的自动化ID?如何将击键发送到应用程序 UI 自动化?我需要自动化键盘中的向上翻页和向下翻页功能。最好的方法是什么?
编辑: 在我的申请中遵循这个过程。假设最终用户打开了 5 页的 MS Word 文档,并且他按下向上翻页和向下翻页按钮在这些页面内移动。我想使用 c# 自动化这个场景。目前我使用 UIAutomationClient.dll 和 UIAutomationTypes.dll。我可以用这些吗?
我需要找出关键板值的自动化ID?如何将击键发送到应用程序 UI 自动化?我需要自动化键盘中的向上翻页和向下翻页功能。最好的方法是什么?
编辑: 在我的申请中遵循这个过程。假设最终用户打开了 5 页的 MS Word 文档,并且他按下向上翻页和向下翻页按钮在这些页面内移动。我想使用 c# 自动化这个场景。目前我使用 UIAutomationClient.dll 和 UIAutomationTypes.dll。我可以用这些吗?
AutoIt 自动化和脚本语言是自动发送各种击键的一个非常好的方法。可以用它做很多事情,尤其是向上翻页和向下翻页发送。
我建议使用 autoit 编写一个 EXE,它将自身连接到它将发送击键的程序。
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轻松完成;它有一个你可以在 C# 中引用的 DLL 来完全满足你的需要。
您是否阅读过 如何向进程发送密钥而不是字符?
这会准确地告诉您如何将密钥发送到应用程序。
// 使用 Windows 窗体并将此列表与发送键一起使用 https://www.autoitscript.com/autoit3/docs/appendix/SendKeys.htm 我很确定他只是在询问他的 SendKey.Send 的键值("{}");
在这种情况下,将 word 文档置于前台,然后在屏幕键盘上
System.Diagnostics.Process.Start("osk.exe");
使用并使用鼠标输入单击向上和向下翻页按钮,因为鼠标单击需要向上和向下翻页按钮的屏幕坐标。
(我尝试使用 UI 自动化检测屏幕键盘。但它没有检测到屏幕的键 。https://stackoverflow.com/questions/11077738/windows-sdk-inspect-tool-what-are-the-reasons -on-screen-keyboard-does-not-disp找不到此问题的解决方案。因此,我使用此移动单击方法单击按钮。)