C#将keypress发送到侦听热键的外部程序

时间:2013-11-26 15:22:46

标签: c# winforms keypress hotkeys

我有一个在后台运行的外部程序。如果我在计算机上的任何地方选择一个号码,并点击一个热键(假设说F10),那么外部程序会选择该号码。

现在我正在尝试创建一个ac#winform应用程序,如果用户在应用程序中选择文本并点击一个按钮,外部程序将选择这个突出显示的文本(所以我实际模拟一个F10按键)

这就是我的尝试:

SendKeys.Send("{F10}");

[DllImport("user32.dll")]
public static extern int SetForegroundWindow(IntPtr hWnd);

private void button1_Click(object sender, EventArgs e)
{
    textBox1.SelectAll();
    while (true)
    {
        Process[] processes = Process.GetProcessesByName("programname");

        foreach (Process proc in processes)
        {
            SetForegroundWindow(proc.MainWindowHandle);
            SendKeys.SendWait("{F10}");
        }

        Thread.Sleep(5000);
    }

}

但是外部程序没有响应以上任何一个.. 希望你们能帮助我。

1 个答案:

答案 0 :(得分:1)

我希望你所谈论的程序为热键注册自己。这意味着当您在任何地方按F10时,WM_HOTKEY消息将被发送到热键应用程序。当您使用SendKeys.Send时,您正在发送不同的Windows消息,因此热键不会被拾取。

所以你可能需要使用适当的值来PostMessage WM_HOTKEY。请注意,正在按下的实际键不会在消息中发送 - 在热门应用程序的RegisterHotKey中传递的ID在WParam中,所以你必须以某种方式找出这个id。如果它是一个常数,你可以尝试使用Spy ++来解决它。