繁体   English   中英

从CTRL +“东西”到带有代码示例的字符串

[英]From CTRL+“something” to a string with a code sample

    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 + ACTRL + End

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

到目前为止,我写道:

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

也许“正常”字符串不是执行此操作的最佳格式?

如果字符串包含“需要发送的字符”,则可能会将KeyEventArgs列表或一些自定义的内置数据类发送到您的Send方法。 然后,您可以遍历列表并一个接一个地执行。 如果您需要组合(例如CTRL + K + CTRL + K (在Visual Studio中=切换书签)),则可能需要一个Composite

另一种选择是创建自己的DSL

对于Serge而言为时已晚,但对于那里的所有Google员工来说,...

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

您可以像这样发送键盘快捷键CTRL + ACTRL + End

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 ,当我有一个特定的快捷方式时,我调用了该方法。 也许这可以帮助您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM