【问题标题】:Why doesn't my form receive simulated "Return" keypress/keydown?为什么我的表单没有收到模拟的“返回”按键/按键?
【发布时间】:2019-02-06 22:03:22
【问题描述】:

我的 windows 窗体在启动时导航到一个网站,我还给窗体一个按钮让我登录到该网站。 我的问题是,现在我希望在运行程序时自动按下该按钮。我给按钮的标签索引为 0,这样我就可以在它运行时模拟“输入”按钮。但是,“输入”没有在表单上注册。我的代码如下.. ps。我正在使用来自 nuget 的 inputsimulator aka windowsinput(适用于控制台)但不适用于表单

我不想使用发送/获取方法

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing;
using WindowsInput.Native;
using WindowsInput;

namespace FormLogin
{
    class Program
    {
        [STAThread]
        static void Main()

        {
            var sim = new InputSimulator();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            sim.Keyboard.Sleep(3000).KeyDown((VirtualKeyCode.RETURN));
        }
    }
}

实际结果 - 表单加载,未按下按钮 预期结果 - 表单加载,按下 Enter 并登录。

【问题讨论】:

  • 你试过在Application.Run上设置断点吗?我相信在new Form1() 关闭之前不会执行下一行。如果您希望在表单加载时发生某些事情,请将代码放入表单构造函数或 Form_Load 事件中。
  • 感谢您的回答。在表单实例关闭之前,我不知道下一行不会运行。我是 c# 的新手,所以我将使用 Form_Load 看看我是否可以让它工作
  • @RufusL 我终于明白了,非常感谢。我被困在了我不知道问题出在其他地方的地方。
  • 我的程序现在可以在启动后按 Enter 键并将我登录到网站。我现在如何添加更多代码以在我登录后执行,以便我可以通过网页中的超链接自动导航?我必须使用异步和等待吗?我假设我不能只添加到显示的表单 w3bbrows3r.Navigate("webpage.com");线程.睡眠(2000); var s = new InputSimulator(); s.Keyboard.KeyPress(VirtualKeyCode.RETURN);线程.睡眠(2000); s.Keyboard.KeyPress(VirtualKeyCode.TAB); s.Keyboard.KeyPress(VirtualKeyCode.TAB);
  • 你为什么认为这行不通?如果没有,请发布一个新问题

标签: c# .net windows winforms


【解决方案1】:

我相信您需要使用 KeyUp,而不是 KeyDown。 KeyDown 是第一个触发的事件,但通常是KeyUp(当用户释放键时)触发该事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多