【问题标题】:Sending shortcuts (sendkeys) to another application while control key is down按下控制键时将快捷方式(发送键)发送到另一个应用程序
【发布时间】:2014-11-02 22:57:18
【问题描述】:

我有一个应用程序,其中我可以在列表中选择选项,在选中时,将焦点焦点放在另一个窗口中并发送快捷方式(例如焦点Chrome,并发送Ctrl + 3 to to to第三个选项卡)。

这很好用,但我也可以使用快捷方式在列表中快速选择一个选项在我自己的应用中(例如Ctrl + 3)。

问题是,如果用户在我的应用程序中使用快捷方式,则 Ctrl 键全局关闭,并且将快捷方式发送到其他应用程序也会使 Ctrl 键关闭。 (请注意,我还使用 Alt 和 Win 键向其他应用程序发送快捷方式,因此在我的应用程序和目标应用程序中使用相同的控制键不是一种选择)

有没有办法告诉 Windows Ctrl 在使用 SendKeys 时没有关闭,以便快捷方式在另一个应用程序中起作用?是否有其他方法可以实现这一目标?

这是我正在使用的代码的简化示例 (C#):

private const int KEYEVENTF_EXTENDEDKEY = 1;
private const int KEYEVENTF_KEYUP = 2;

[DllImport("user32.dll")]
private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

public void SendCtrl3()
{
    keybd_event(0xA2, 0, KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(0x33, 0, KEYEVENTF_EXTENDEDKEY, 0);
    keybd_event(0x33, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
    keybd_event(0xA2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}

【问题讨论】:

  • Hmya,这不仅仅是 Ctrl 键的问题。当用户按下 any 键时会出错。他的输入将以完全不可预测的方式任意与您的输入混合。当然,为什么尝试使用键盘输入自动化程序的一个核心原因是失败的鲸鱼。您必须使用 UI 自动化库来提升这一点,例如,可以直接将文本直接插入文本框。
  • 你是对的,问题是我的应用程序中的任何快捷方式都会触发另一个应用程序中的快捷方式。遗憾的是,我找不到适用于 Chrome、Firefox 和 Notepad++ 的 API 来切换标签而不使用 SendKeys,或者在不使用 Win + S 的情况下打开 Windows 搜索魅力...但你可能在 UI 自动化上有一些东西,如果我可以“点击”一个标签,那至少可以解决我的一些用例......

标签: c# windows keyboard-shortcuts conflict sendkeys


【解决方案1】:

似乎如果该键在物理上处于关闭状态,则无法实现,因此其他应用不会将该键视为已关闭。

我发现的最佳选择是使用 UI 自动化。

http://msdn.microsoft.com/en-us/library/ms747327(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多