【问题标题】:SendKey command working with vbs but not C#SendKey 命令适用于 vbs 但不适用于 C#
【发布时间】:2015-06-04 20:21:22
【问题描述】:

我正在尝试从 Windows 窗体按钮 (C#) 发送 Ctrl+Alt+Left 来旋转我的屏幕。这是一个英特尔热键。 当我按下按钮时,什么也没有发生,但如果我在 vbs 文件中使用几乎相同的命令,它就可以工作。

这是不起作用的c#代码:

private void button1_Click(object sender, EventArgs e)
{
    SendKeys.Send("^%{LEFT}");
}

确实有效的vb脚本:

Set objShell = CreateObject("WScript.Shell") 
objShell.SendKeys "^%{LEFT}"

我对这一切都很陌生,所以也许我遗漏了一些明显的东西?

【问题讨论】:

  • 尝试使用SendKeys.SendWait()
  • 同样的结果。我刚刚注意到 send 和 sendwait 都可以在我的 Windows 8 电脑上工作,但不能在我需要它的 xp 机器上工作。
  • 击键仅在实际支持此功能的硬件上有效。此外,SendKeys 将击键发送到the current application,而脚本将其发送到您的桌面
  • 两台电脑都在运行英特尔显卡,其 hkcmd.exe 后台进程正在寻找这些按键。奇怪的是为什么我上面使用的c#方法可以在win8上运行,而在xp上不行

标签: c# sendkeys


【解决方案1】:

可能是括号问题:

SendKeys.Send("^(%{LEFT})");

您可以在documentation 中找到更多详细信息,其中声明:

指定应按住 SHIFT、CTRL 和 ALT 的任意组合 向下同时按下其他几个键,附上这些键的代码 括号中的键。例如,指定在按住 SHIFT 的同时 按下 E 和 C,使用“+(EC)”。指定在按住 SHIFT 的同时 按下 E 后按 C 不加 SHIFT,使用“+EC”。

不确定 VBS 的行为:我希望 C# 的行为完全相同,因为 SendKeys 的 VBS documentation 这么说...

【讨论】:

    猜你喜欢
    • 2021-03-23
    • 2016-07-17
    • 2011-03-28
    • 1970-01-01
    • 2021-05-02
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多