从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)
也许'正常'字符串不是最好的格式?
如果字符串包含'需要发送的字符',也许KeyEventArgs
列表或一些自定义构建的数据类可以发送到您的Send方法。然后循环遍历列表并逐一执行。如果您需要组合(如CTRL+K + CTRL+K (= Visual Studio中的toggle bookmark)),您可能需要组合。
对于Serge来说太晚了,但是对于所有的谷歌人来说…
Serge指的是TestStack.White中的Keyboard类。Send
函数只能用于将字符串直接发送到另一个窗口。您不能在这里指定控制键。它们只是有时在内部被需要。例如,我的键盘布局上的Send("{")
将内部转换为"AltKeyIsNeeded"answers"7"。
您可以发送键盘快捷键CTRL+A, CTRL+结束,如下所示:
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用于极少数例外情况。