C#如何快速获取P/Invoke方法签名
使用API函数已经好几年了,封装函数签名基本是参照MSDN上的文档,然后再做数据类型对应。
虽然有 pinvoke.net 这个网站,但基本很少使用。一方面是想多动手,另一方面是因为各种数据类型基本都用过了,都能自己在C#中 对应 起来。
最近在逛github时,发现了一个官方的项目,GitHub - dotnet/pinvoke: A library containing all P/Invoke code so you don't have to import it every time. Maintained and updated to support the latest Windows OS.,这个项目是流行操作系统的所有P/Invoke方法签名的库集合。
Library | Package name | Description |
---|---|---|
advapi32.dll | PInvoke.AdvApi32 | Windows Advanced Services |
bcrypt.dll | PInvoke.BCrypt | Windows Cryptography API: Next Generation |
cabinet.dll | PInvoke.Cabinet | Cabinet API Functions |
cfgmgr32.dll | PInvoke.CfgMgr32 | Device and Driver Installation |
crypt32.dll | PInvoke.Crypt32 | Windows Cryptography API |
DwmApi.dll | PInvoke.DwmApi | Desktop Window Manager |
fusion.dll | PInvoke.Fusion | .NET Framework Fusion |
gdi32.dll | PInvoke.Gdi32 | Windows Graphics Device Interface |
hid.dll | PInvoke.Hid | Windows Human Interface Devices |
iphlpapi.dll | PInvoke.IPHlpApi | IP Helper |
kernel32.dll | PInvoke.Kernel32 | Windows Kernel API |
magnification.dll | PInvoke.Magnification | Windows Magnification API |
mscoree.dll | PInvoke.MSCorEE | .NET Framework CLR host |
msi.dll | PInvoke.Msi | Microsoft Installer |
ncrypt.dll | PInvoke.NCrypt | Windows Cryptography API: Next Generation |
netapi32.dll | PInvoke.NetApi32 | Network Management |
newdev.dll | PInvoke.NewDev | Device and Driver Installation |
ntdll.dll | PInvoke.NTDll | Windows NTDll |
psapi.dll | PInvoke.Psapi | Windows Process Status API |
setupapi.dll | PInvoke.SetupApi | Windows setup API |
SHCore.dll | PInvoke.SHCore | Windows Shell |
shell32.dll | PInvoke.Shell32 | Windows Shell |
user32.dll | PInvoke.User32 | Windows User Interface |
userenv.dll | PInvoke.Userenv | Windows User Environment |
uxtheme.dll | PInvoke.UxTheme | Windows Visual Styles |
winusb.dll | PInvoke.WinUsb | USB Driver |
WtsApi32.dll | PInvoke.WtsApi32 | Windows Remote Desktop Services |
例如要使用User32中的ShowWindow函数
1、导入Nuget包(PInvoke.User32)
2、使用
写在最后
有了这个项目,以后调用API函数可以更方便。最重要的是,官方提供了函数签名示例,我们可以从里面学到很多东西。
2024.11.06更新
pinvoke项目已经废弃,使用CsWin32项目替代,使用方法跟上述基本一致。
CsWin32项目将不同的dll导出函数都放到一个包中,不需要再去使用对应dll的包。
nuget搜索CsWin32包使用即可。