【问题标题】:Send combination of keystrokes to background window将击键组合发送到后台窗口
【发布时间】:2012-10-09 17:34:43
【问题描述】:

在对 Stackoverflow 和 google 进行了大量研究之后,似乎很难使用它的句柄将击键组合发送到背景窗口。比如我要发送CTRL+F,好像Sendmessage不行,sendinput也没有效果,因为窗口需要焦点。

所以我最后的想法是关于钩子:有没有用那种方式发送组合?

【问题讨论】:

    标签: c# hook


    【解决方案1】:

    好的,我找到了一种解决方法,但它不适用于所有应用程序。否则,它可以与我想用按键组合控制的程序 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);
            }
        }                           
    }
    
    }
    

    【讨论】:

      【解决方案2】:

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

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

      PostMessage

      SendMessage

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

      所有代码已签入 GitHub:https://github.com/EasyAsABC123/Keyboard

      【讨论】:

      • 我目前正在 BlueStacks 上玩一些手机游戏,而您的库正是我所需要的。我很想试试。感谢分享!
      • @Shinigamae 从来没有问题,如果您有任何问题,请随时提出
      • @abc123 似乎背景不起作用。或者我确实以错误的方式实施它。我在 WPF 应用程序中使用它。否则,前台(您的示例)工作得很好。
      • @Shinigamae 只需将其记录为问题,我可能需要知道您需要什么示例。
      • @Nico 它只是使用 Windows 消息传递,Bluestacks 可能会忽略它。简单的解决方案是注入 Bluestacks 模拟器,然后将密钥发送到 bluestacks,并让注入的项目有一个用于 Windows 键盘的 api
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      相关资源
      最近更新 更多