这个API到底是什么,它的作用是什么?

3

我知道你会因为这种问题而讨厌我。但能有人告诉我以下代码是在做什么吗?

我的意思是有一些库被加载了,我明白。还有一些方法,但我仍然不明白。

例如:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]

以下是代码:

这里是代码:

private static class API 
    {

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern IntPtr SetWindowsHookEx(
            int idHook,
            HookDel lpfn,
            IntPtr hMod,
            uint dwThreadId);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool UnhookWindowsHookEx(IntPtr hhk);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern IntPtr CallNextHookEx(
            IntPtr hhk,
            int nCode,
            IntPtr wParam,
            IntPtr lParam);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern IntPtr GetModuleHandle(
            string lpModuleName);
    }

您不必逐行向我解释。请至少提供一些参考资料,以便我可以查阅。谢谢!

4
这段代码仅声明了一些由P/Invoke提供的方法,本身并没有实际作用。更重要的是如何在运行时使用这些方法,以回答它们被用来做什么。 - Marc Gravell
4个回答

3
这段代码使用P/Invoke,允许C#代码调用与Windows Hooks相关的几个Win32 API函数。
发布的代码只定义了这些方法;它没有调用它们,因此本身并没有实现任何功能。它只允许你从代码的其他部分使用这些方法。

2
这里是一篇较旧的MSDN文章,解释了P/Invoke和正在发生的事情。希望这可以帮助您。
代码的作用是允许您的托管C#代码调用非托管的Win32 API函数。
这里还有一个tutorial,在MSDN上为您演示创建像您所提问的代码的P/Invoke过程。

1

1

看一下this。你的程序在某个地方安装了一个钩子到Windows钩子链中来监视一些事件。

dllimport属性本身允许程序调用Win32 API函数,就像前面的答案所提到的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接