c#winforms-是否可以在多个应用程序上使用全局热键

c#winforms-是否可以在多个应用程序上使用全局热键,c#,winforms,global-hotkey,C#,Winforms,Global Hotkey,在PDF阅读器中,我们使用右箭头按钮切换到下一页。在我自己的winforms应用程序中,我将右箭头键指定给全局热键,当我按下右箭头键时,它会显示“hello world”以供试用 在本例中,当我打开PDF阅读器并按向右箭头时,它会显示“hello world”,但不会切换到下一页。我希望当我按下PDF阅读器上的右箭头按钮时,切换到下一页并说“hello world”,因为我自己的winform应用程序中有全局热键分配 当我在谷歌上搜索时,我找不到一篇关于这种情况的文章。我如何才能做到这一点?基于

在PDF阅读器中,我们使用右箭头按钮切换到下一页。在我自己的winforms应用程序中,我将右箭头键指定给全局热键,当我按下右箭头键时,它会显示“hello world”以供试用

在本例中,当我打开PDF阅读器并按向右箭头时,它会显示“hello world”,但不会切换到下一页。我希望当我按下PDF阅读器上的右箭头按钮时,切换到下一页并说“hello world”,因为我自己的winform应用程序中有全局热键分配


当我在谷歌上搜索时,我找不到一篇关于这种情况的文章。我如何才能做到这一点?

基于Jimi的例子:

public YourClass()
{
    InitializeComponent();
    //const int id = 0; // The id of the hotkey.
    // For eaxple hot key F5
    RegisterHotKey(Handle, 0, (int)KeyModifier.None, Keys.F5.GetHashCode());
}
protected override void WndProc(ref Message message)
{
    base.WndProc(ref message);
    if (message.Msg == 0x0312)
    {
        var id = message.WParam.ToInt32();
        if (id == 0)
        {
            /*
             * Write a method hee what you want to do.
            */
            // Let the command press the right arraybotton instead.
            SendKeys.SendWait("{RIGHT}");
        }
    }
}

根据Jimi的例子:

public YourClass()
{
    InitializeComponent();
    //const int id = 0; // The id of the hotkey.
    // For eaxple hot key F5
    RegisterHotKey(Handle, 0, (int)KeyModifier.None, Keys.F5.GetHashCode());
}
protected override void WndProc(ref Message message)
{
    base.WndProc(ref message);
    if (message.Msg == 0x0312)
    {
        var id = message.WParam.ToInt32();
        if (id == 0)
        {
            /*
             * Write a method hee what you want to do.
            */
            // Let the command press the right arraybotton instead.
            SendKeys.SendWait("{RIGHT}");
        }
    }
}

如果将代码放在多个应用程序中,则在多个应用程序中具有相同的功能。但是您不能使用C#/winforms修改其他应用程序。您可以使用
SendKeys.SendWait(“{RIGHT}”)
重新发送输入(至少使用RegisterHotKey)。您可能还需要在
app.config
部分添加
。不过,并非所有应用程序都处理此类输入。你可能需要更深入的研究。@Jimi-谢谢你。我试试看。我希望它打开了一扇新的门…如果你把你的代码放在多个应用程序中,你在多个应用程序中有相同的功能。但是您不能使用C#/winforms修改其他应用程序。您可以使用
SendKeys.SendWait(“{RIGHT}”)
重新发送输入(至少使用RegisterHotKey)。您可能还需要在
app.config
部分添加
。不过,并非所有应用程序都处理此类输入。你可能需要更深入的研究。@Jimi-谢谢你。我试试看。我希望它打开了一扇新的门…当相关句柄被销毁(即窗体关闭)或当前线程(如果hWnd为null)终止时调用非常重要。当相关句柄被销毁(即窗体关闭)或当前线程(如果hWnd为null)终止时调用非常重要。