这个API到底是什么,它在做什么

本文关键字:什么 是什么 API 这个 | 更新日期: 2023-09-27 18:03:21

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

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

例如:

[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);
    }

你不必逐行向我解释。请至少给我一些参考资料,以便我能读懂它。

提前感谢!

这个API到底是什么,它在做什么

这段代码使用p/Invoke来允许c#代码调用几个与Windows Hooks相关的Win32 API函数。

张贴的代码只定义了方法;它不调用它们,所以它自己不做任何事情。它只允许您使用代码中其他部分的方法。

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

代码所做的是允许您的托管c#代码调用非托管的Win32 API函数。

这里还有一个关于MSDN的教程,指导您完成创建代码的p/Invoke过程,就像您的问题一样。

DllImport用于调用。net/托管代码中的非托管代码/API。你发布的所有代码都试图与Win32 API的window对象一起工作。

引用:

DLLImport

Win32 API

Win32 API到。net API映射

看看这个。你的程序在某个地方安装了一个钩子到窗口钩子链来监视一些事件。

dllimport属性本身允许程序调用win32 api函数,就像前面的答案提到的。