【发布时间】: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