【问题标题】:Low level Keyboard Hook in C#C# 中的低级键盘挂钩
【发布时间】:2011-07-29 01:09:19
【问题描述】:

我正在制作一个模块,该模块将通过 KEYBOARD 控制和移动平移和倾斜设备。 该模块是一个 C# .DLL 并通过其他模块使用反射动态加载。 该模块不能有任何形式(可见)。

我正在使用在 http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx 上找到的代码作为低级 kb 挂钩。 唯一的问题是它使用 consol 应用程序并调用 Application.Run() 来处理消息循环,这是挂钩正常工作所必需的。因为我有一个 .dll 而不是控制台应用程序,所以我无法让它工作并抓住按下的键。

问题: 如何替换对 Application.Run() 的调用以处理 .dll 中的消息循环以捕获 KB 挂钩?

谢谢!!!!

【问题讨论】:

    标签: c# .net keyboard hook


    【解决方案1】:

    对于消息循环,不需要控制台或 GUI - 它可以保持隐藏状态并拦截消息。

    【讨论】:

      【解决方案2】:

      您的 DLL 应该使用加载它的程序中的消息循环。但是,如果这不可能,您可以让您的 DLL 启动一个新线程并从该线程内部调用 Application.Run() 并使用它自己的消息循环。

      public static void InjectionPoint()
      {
          Thread thread = new Thread(new ThreadStart(DLLMessageLoop));
          thread.IsBackground = true;
          thread.Start();
      }
      
      public static void DLLMessageLoop()
      {
          _hookID = SetHook(_proc);
          Application.Run();
          UnhookWindowsHookEx(_hookID);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多