C# 将按键组合发送到后台窗口

C# 将按键组合发送到后台窗口,c#,hook,C#,Hook,在对Stackoverflow和google进行了大量研究之后,似乎很难使用它的句柄将按键组合发送到背景窗口。例如,我想发送CTRL+F。似乎Sendmessage不起作用,sendinput无效,因为窗口需要焦点 因此,我最后的想法是关于挂钩:是否有使用这种方式发送组合的方法?好的,我找到了一种解决方法,但它并不适用于所有应用程序。否则,它与puTTY一起工作,puTTY是我想用按键组合控制的程序。即使应用程序没有重点,它也能工作。所以我现在完成了 class SendMessage { [D

在对Stackoverflow和google进行了大量研究之后,似乎很难使用它的句柄将按键组合发送到背景窗口。例如,我想发送CTRL+F。似乎Sendmessage不起作用,sendinput无效,因为窗口需要焦点


因此,我最后的想法是关于挂钩:是否有使用这种方式发送组合的方法?

好的,我找到了一种解决方法,但它并不适用于所有应用程序。否则,它与puTTY一起工作,puTTY是我想用按键组合控制的程序。即使应用程序没有重点,它也能工作。所以我现在完成了

class SendMessage
{
[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

public static void sendKeystroke()
{
    const uint WM_KEYDOWN = 0x100;
    const uint WM_KEYUP = 0x0101;

    IntPtr hWnd;
    string processName = "putty";
    Process[] processList = Process.GetProcesses();

    foreach (Process P in processList)
    {
        if (P.ProcessName.Equals(processName))
        {
            IntPtr edit = P.MainWindowHandle;
            PostMessage(edit, WM_KEYDOWN, (IntPtr)(Keys.Control), IntPtr.Zero);
            PostMessage(edit, WM_KEYDOWN, (IntPtr)(Keys.A), IntPtr.Zero);
            PostMessage(edit, WM_KEYUP, (IntPtr)(Keys.Control), IntPtr.Zero);
        }
    }                           
}

}

我已经编写了两个程序,将击键发送到后台窗口,我通常实现PostMessage/SendMessage。我记录了我所有的发现

但基本上,您将使用低级c调用将消息放入windows消息队列,以允许应用程序拾取按键

如果您有任何问题,请告诉我,我的库是用C#编写的,我很乐意与您分享。此方法还允许在后台窗口中使用鼠标:)


所有代码都已签入GitHub:

我正在Bluestack上玩一些手机游戏,您的库正是我所需要的。我很想试试。谢谢分享@Shinigamae从来都不是问题,如果您有任何问题,请随时联系ask@abc123背景的那个好像不行。或者我用错误的方式实现了它。我正在WPF应用程序中使用它。否则,前台(您的示例)工作得很好。@Shinigamae只是将其作为一个问题记录下来,我可能需要知道您需要什么示例。@Nico它只是使用Windows消息传递,Bluestack可能会忽略它。简单的解决方案是注入Bluestacks模拟器,然后让它向Bluestacks发送键,并让注入的项具有用于windows键盘的api