Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将击键发送到应用程序UI自动化-C#_C#_C# 4.0_Automation - Fatal编程技术网

如何将击键发送到应用程序UI自动化-C#

如何将击键发送到应用程序UI自动化-C#,c#,c#-4.0,automation,C#,C# 4.0,Automation,我需要找出键盘值的automationid?如何将按键发送到应用程序UI自动化?我需要在键盘上自动翻页和翻页功能。最好的方法是什么 是吗 编辑: 在我的申请中遵循以下流程。假设最终用户打开有5页的MS Word文档,并按下向上翻页和向下翻页按钮在这些页面内移动。我想使用c#自动化这个场景。目前我已使用UIAutomationClient.dll和UIAutomationTypes.dll。我可以使用这些吗?我认为您希望向没有源代码的应用程序发送击键。 我不能帮你直接用C#告诉你怎么做。 但是,你

我需要找出键盘值的automationid?如何将按键发送到应用程序UI自动化?我需要在键盘上自动翻页和翻页功能。最好的方法是什么 是吗

编辑:
在我的申请中遵循以下流程。假设最终用户打开有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("=");
    }