这个API究竟是什么以及它在做什么?

时间:2011-07-23 16:22:35

标签: c# api external dllimport

我知道你会因为那样的问题而讨厌我。但有人可以告诉我以下代码在做什么吗?

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

F.e:

[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 个答案:

答案 0 :(得分:3)

此代码使用P/Invoke来允许C#代码调用与Windows Hooks相关的多个Win32 API函数。

发布的代码仅定义方法;它不会调用它们,因此它本身不会做任何事情。它只允许您使用代码其他部分的方法。

答案 1 :(得分:2)

这是一篇较早的MSDN文章,解释P / Invoke以及发生了什么。希望这会对你有所帮助。

代码的作用是允许托管的C#代码调用非托管的Win32 API函数。

这里也是MSDN上的tutorial,它引导您完成创建代码的P / Invoke过程,就像您的问题一样。

答案 2 :(得分:1)

DllImport用于在.Net /托管代码中调用非托管代码/ API。您发布的所有代码都在尝试使用Win32 API的window对象。

参考文献:

DLLImport

Win32 API

Win32 API to .Net API map

答案 3 :(得分:1)

看看this。你的程序在某个地方安装一个挂钩进入windows钩链来监视一些事件。

dllimport属性本身允许程序调用win32 api函数,就像之前的回答一样。