这个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);
}
你不必逐行向我解释。请至少给我一些参考资料,以便我能读懂它。
提前感谢!
这段代码使用p/Invoke来允许c#代码调用几个与Windows Hooks相关的Win32 API函数。
张贴的代码只定义了方法;它不调用它们,所以它自己不做任何事情。它只允许您使用代码中其他部分的方法。
这是一篇较早的MSDN文章,解释了p/Invoke以及发生了什么。希望对你有所帮助。
代码所做的是允许您的托管c#代码调用非托管的Win32 API函数。
这里还有一个关于MSDN的教程,指导您完成创建代码的p/Invoke过程,就像您的问题一样。
DllImport
用于调用。net/托管代码中的非托管代码/API。你发布的所有代码都试图与Win32 API的window
对象一起工作。
引用:
DLLImport
Win32 APIWin32 API到。net API映射
看看这个。你的程序在某个地方安装了一个钩子到窗口钩子链来监视一些事件。
dllimport属性本身允许程序调用win32 api函数,就像前面的答案提到的。