我知道你会因为那样的问题而讨厌我。但有人可以告诉我以下代码在做什么吗?
我的意思是加载了一些库,我明白了。加上有一些方法,但我还是不明白。
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);
}
你不必向我解释一行。至少请给我一些参考,我可以在那里阅读。
提前谢谢!答案 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
对象。
参考文献:
答案 3 :(得分:1)
看看this。你的程序在某个地方安装一个挂钩进入windows钩链来监视一些事件。
dllimport属性本身允许程序调用win32 api函数,就像之前的回答一样。