从CTRL +“something"转换为带有代码示例的字符串

本文关键字:代码 字符串 转换 CTRL something quot | 更新日期: 2023-09-27 17:50:31

    public virtual void Send(string keysToType, ActionListener actionListener)
    {
        if (heldKeys.Count > 0) keysToType = keysToType.ToLower();
        CapsLockOn = false;
        foreach (char c in keysToType)
        {
            short key = VkKeyScan(c);
            if (c.Equals(''r')) continue;
            if (ShiftKeyIsNeeded(key)) SendKeyDown((short) KeyboardInput.SpecialKeys.SHIFT, false);
            if (CtrlKeyIsNeeded(key)) SendKeyDown((short) KeyboardInput.SpecialKeys.CONTROL, false);
            if (AltKeyIsNeeded(key)) SendKeyDown((short) KeyboardInput.SpecialKeys.ALT, false);
            Press(key, false);
            if (ShiftKeyIsNeeded(key)) SendKeyUp((short) KeyboardInput.SpecialKeys.SHIFT, false);
            if (CtrlKeyIsNeeded(key)) SendKeyUp((short) KeyboardInput.SpecialKeys.CONTROL, false);
            if (AltKeyIsNeeded(key)) SendKeyUp((short) KeyboardInput.SpecialKeys.ALT, false);
        }
        actionListener.ActionPerformed(Action.WindowMessage);
    }

我需要发送一个键盘快捷键列表给那个方法

CTRL + , CTRL + 结束,等。

但是我不知道如何构建这样一个字符串。

到目前为止,我写了这个:

 string shortcuts;
 // shortcuts = "'CTRL + A" + "'CTRL + End";
 Send(shortcuts, myactionlistener)

从CTRL +“something"转换为带有代码示例的字符串

也许'正常'字符串不是最好的格式?

如果字符串包含'需要发送的字符',也许KeyEventArgs列表或一些自定义构建的数据类可以发送到您的Send方法。然后循环遍历列表并逐一执行。如果您需要组合(如CTRL+K + CTRL+K (= Visual Studio中的toggle bookmark)),您可能需要组合。

另一个选择是创建自己的DSL。

对于Serge来说太晚了,但是对于所有的谷歌人来说…

Serge指的是TestStack.White中的Keyboard类。Send函数只能用于将字符串直接发送到另一个窗口。您不能在这里指定控制键。它们只是有时在内部被需要。例如,我的键盘布局上的Send("{")将内部转换为"AltKeyIsNeeded"answers"7"。

您可以发送键盘快捷键CTRL+ACTRL+结束,如下所示:

myWindow.Keyboard.HoldKey(KeyboardInput.SpecialKeys.CONTROL);
myWindow.Keyboard.Enter("A");
myWindow.Keyboard.LeaveKey(KeyboardInput.SpecialKeys.CONTROL);
myWindow.Keyboard.HoldKey(KeyboardInput.SpecialKeys.CONTROL);
myWindow.Keyboard.HoldKey(KeyboardInput.SpecialKeys.END);
myWindow.Keyboard.LeaveKey(KeyboardInput.SpecialKeys.END);
myWindow.Keyboard.LeaveKey(KeyboardInput.SpecialKeys.CONTROL);

我在一个应用程序中做过类似的事情,使用Windows键的快捷键。我使用的是WH_KEYBOARD_LL hook,当我有一个特定的快捷方式时,我调用该方法。也许这能帮到你。

在我的UI自动化经验中,有一些情况下@m3tikn0b的解决方案不适合我,特别是ALT+DOWN和ALT+UP,不知道为什么。为了使它们工作,我必须使用WinForm的SendKeys,例如ALT+DOWN,它是:

SendKeys.SendWait("%({DOWN})");

在文档中有非常丰富的语法描述Send方法。然而,它并不适用于我所有的情况,所以我不得不使用TestStack。白色用于大多数情况,SendKeys用于极少数例外情况。