在控制键关闭时将快捷方式(sendkeys)发送到另一个应用程序

时间:2014-09-09 13:32:49

标签: c# windows keyboard-shortcuts conflict sendkeys

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

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

问题是,如果用户在我的应用程序中使用快捷方式,则Ctrl密钥全局关闭,向其他应用程序发送快捷方式也会导致Ctrl密钥关闭。 (请注意,我还使用AltWin密钥向其他应用程序发送快捷方式,因此在我的应用程序和目标应用程序中使用相同的控制键不是一个选项)

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

以下是我正在使用的代码(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);
}

1 个答案:

答案 0 :(得分:0)

似乎如果密钥在物理上是关闭的,那么就没有办法让它成为其他应用程序而不会将该密钥视为关闭。

我找到的最佳选择是使用UI自动化。

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