【问题标题】:Global Hooks (non-active program)全局挂钩(非活动程序)
【发布时间】:2012-02-04 15:48:48
【问题描述】:

我正在创建一个允许您粘贴文本的程序,但它看起来就像您在粘贴时正在键入它,Paste Typer。

我想使用Ctrl + b 来启动粘贴,但我遇到了热键问题。

我认为我需要的是使用 WH_KEYBOARD_LL 挂钩并包含该 user32 文件,但添加它和命名空间时通常会出错。

我最接近这个:http://thedarkjoker94.cer33.com/?p=111 - 但它似乎不适用于Ctrlalt 和其他修饰符,即使我使用了KeyData

我需要一种方法来制作即使程序不是活动窗口也能正常工作的热键。这是 Microsoft Visual C# 2010 中的 Windows 窗体应用程序。

有很多 StackOverlow 主题,但它们都过时了,而且还不够完整,我无法运行一些东西。

【问题讨论】:

    标签: c# hook global hotkeys


    【解决方案1】:

    你说的是HookManager吗?

    我这样使用成功:

    HookManager.KeyDown += new KeyEventHandler(HookManager_KeyDown);
    

    void HookManager_KeyDown(object sender, KeyEventArgs e)
    {
        if (Keyboard.IsKeyDown(Keys.LWin)) // Is the Left-Windows Key down and ...
            switch (e.KeyCode)
            {
                case Keys.O: 
                    // ...
                    e.Handled = true;
                    break;
                case Keys.H: 
                    // ...
                    e.Handled = true;
                    break;
            }
    }
    

    我在这里创建的键盘类是代码:

    // Used: http://www.pinvoke.net/default.aspx/user32.getasynckeystate
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace Win32.Devices
    {
        public class Keyboard
        {
            [DllImport("user32.dll")]
            static extern ushort GetAsyncKeyState(Keys vKey);
    
            public static bool IsKeyDown(Keys key)
            {
                return 0 != (GetAsyncKeyState(key) & 0x8000);
            }
        }
    }
    

    【讨论】:

    • 我说的是那篇代码项目文章。那么我必须包括什么才能得到它?我只是使用你在那里提供的代码和课程吗?我还偶然发现了一个看似简单的教程(codeproject.com/KB/miscctrl/ashsimplehotkeys.aspx),但我仍然无法让它工作。添加代码后我得到一堆错误
    • 添加指向 GlobalHook\Gma.UserActivityMonitor\bin\Debug\Gma.UserActivityMonitor.dll 的链接,然后像我在上面的代码中那样引用 HookManager 类。它可能是为 .Net 3.5 及之前制作的,它可能无法编译,但它附带的 dll 应该可以工作。
    • 抱歉,如何添加文件链接?我是否 [DllImport("GlobalHook\Gma.UserActivityMonitor\bin\Debug\Gma.UserActivityMonitor.dll")]?我需要下载什么吗?
    • 他制作了一个新版本:globalmousekeyhook.codeplex.com 您必须下载 dll/源文件才能使用它们。如果您有 Visual Studio,请将 reference 添加到文件中。否则,您将不得不向 StackOverflow 提出另一个问题“如何在没有 Visual Studio 的情况下链接 dll”
    • 感谢您到目前为止的帮助。我仍在试图弄清楚如何使用它。我有 dll 作为参考,我将它作为一个项目添加到我的工具箱中,我打开并启用了 MouseKeyEventProvider,但我不确定如何挂钩或监控它。
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多