.NET类库“Vanara”:简单易用的Windows API封装库

仓库地址:https://github.com/dahall/Vanara

翻译:沙漠尽头的浪(水平有限,如有条件请尽量查看仓库地址翻阅)

.NET类库“Vanara”:简单易用的Windows API封装库

一系列非常简单易用,对Windows API做了极好封装的.NET类库,几乎不用再写繁琐的Windows API转换函数了。

Version
Downloads
Build status

此项目包含各种.NET程序集,这些程序集包含来自Windows库的P/Invoke函数、接口、枚举和结构。每个程序集都与一个或几个紧密相关的库相关联。例如,Shlwapi.dll包含从Shlwapi.lib导出的所有函数;Kernel32.dll包含Kernel32.lib和kernelbase.lib的全部。

所有程序集都可通过NuGet获得,并提供针对.NET 2.0、3.5、4.0、4.5、Core 3.0、Core 3.1和.NET 5.0(v3.2.20中新增)的版本,并支持SourceLink。在依赖项不允许的所有情况下,.NET Standard 2.0、.NET Core 2.0和2.1版本也包含在UWP和其他.NET Core及标准项目中。

在充分测试之后,这个项目每隔几周发布一次新版本。新的版本和发行说明一起被编目在Releases部分,所有NuGet包都发布到nuget.org。每个GitHub推送都会触发AppVeyor构建。所有者感谢他们的免费开源帐户!文章开头显示了项目构建状态信息。AppVeyor源用于构建NuGet包。

怎么用?

  1. 在Microsoft文档中查找所需的函数。请注意函数位于哪个库或DLL中。
  2. 查看下面的支持库表,确认Vanara库存在并具有您需要的函数(Windows API)。单击程序集链接将带您深入了解该程序集的覆盖范围。找到你的函数,如果有一个匹配的实现,它会出现在右边。您还可以使用GitHub的项目搜索(页面左上角)来搜索函数、方法或常量。确保选择“在此存储库中”。
  3. 通过NuGet将程序集添加到项目中。
  4. 要使用该功能,您可以:
    1. 直接调用var bret = Vanara.PInvoke.Kernel32.GetComputerName(sb, ref sbSz);
    1. 在C#6.0及更高版本下,使用static using指令并调用它:
using static Vanara.PInvoke.Kernel32;
var bret = GetComputerName(sb, ref sbSz);

5.在某些情况下,其中一个[支持程序集]中有一个对应的helper/wrapper类,特别是对于安全性、系统服务、窗体和Shell。转到他们的库页面(单击部分中的链接),浏览每个库中包含的类。

设计理念

  • 从单个DLL导入的所有函数都应放置到以DLL命名的单个程序集中。
    • (例如,程序集Vanara.PInvoke.Gdi32.dll承载系统目录中从gdi32.dll导出的所有函数和支持的枚举、常量和结构。)
  • 任何由许多库使用的结构、宏或枚举(非函数)都会放入Vanara.Core或’Vanara.PInvoke.Shared`库中。
    • (例如,宏HIWORD'和结构SIZE都在Vanara.PInvoke.Shared中,简化互操作调用和本机内存管理的类都在'Vanara.Core中)
  • 在项目中,所有构造都包含在一个以头文件(*.h)命名的文件中,其中这些结构在Windows API中定义。
    • (例如,在Vanara.PInvoke.Kernel32项目目录中,您将分别找到一个FileApi.cs、WinBase.cs和一个WinNT.cs文件,分别表示FileApi.h、WinBase.h和WinNT.h)
  • 如果直接解释结构或函数会导致内存泄漏或误用,我试图简化它的使用。
  • 在结构体总是通过引用传递,并且在需要清理内存分配的地方,我将结构体更改为实现IDispoable的类。
  • 尽可能,所有句柄都已转换为以Windows API句柄命名的SafeHandle派生工具。如果这些句柄需要调用函数以释放/关闭/销毁,则存在一个派生的SafeHANDLE,该函数将在disposal时执行该函数。
    • 例如,定义了HTOKENSafeHTOKEN在该句柄上调用CloseHandle自动释放。
  • 尽可能,分配调用方释放的内存的所有函数都使用安全的内存句柄。
  • 程序集中所有PInvoke调用都以’Vanara.PInvoke`为前缀。
  • 如果要将结构体作为常量传递到函数中,则使用in语句封装该结构体,该语句将通过引用传递结构体,而不需要ref关键字。
    • Windows API:BOOL MapDialogRect(HWND hDlg, LPRECT LPRECT)
    • Vanara:bool MapDialogRect(HWND hDlg, in RECT lpRect);
  • 如果有类或扩展使用PInvoke调用,则它们位于以’Vanara’前缀的包装程序集中,然后后跟该功能的逻辑名称。今天,它们是Core、Security、SystemServices、Windows.Forms和Windows.Shell。

支持的库

Library/DLLAssemblyCoverageNuGet Link       
aclui.dllVanara.PInvoke.AclUICoverage
advapi32.dll, secur32.dll, authz.dll, sspicli.dll, schannel.dllVanara.PInvoke.SecurityCoverage
cabinet.dllVanara.PInvoke.CabinetCoverage
CfgMgr32.dllVanara.PInvoke.CfgMgr32Coverage
CldApi.dllVanara.PInvoke.CldApiCoverage
comctl32.dllVanara.PInvoke.ComCtl32Coverage
ComDlg32.dllVanara.PInvoke.ComDlg32Coverage
credui.dllVanara.PInvoke.CredUICoverage
crypt32.dll, bcrypt.dll, ncrypt.dll, tokenbinding.dll, cryptui.dll, cryptnet.dll, cryptdlg.dllVanara.PInvoke.CryptographyCoverage
d2d1.dll, dxgi.dll, dwrite.dll, windowscodecs.dllVanara.PInvoke.GraphicsCoverage
DbgHelp.dll, ImageHlp.dllVanara.PInvoke.DbgHelpCoverage
Dhcpcsvc6.dll, Dhcpcsvc.dllVanara.PInvoke.DhcpCoverage
DnsApi.dllVanara.PInvoke.DnsApiCoverage
Drt.dllVanara.PInvoke.DrtCoverage
dwmapi.dllVanara.PInvoke.DwmApiCoverage
FirewallApi.dllVanara.PInvoke.FirewallApiCoverage
FunDisc.dllVanara.PInvoke.FunDiscCoverage
gdi32.dllVanara.PInvoke.Gdi32Coverage
imapi2.dll, imapi2fs.dllVanara.PInvoke.IMAPICoverage
iphlpapi.dllVanara.PInvoke.IpHlpApiCoverage
IScsiDsc.dllVanara.PInvoke.IScsiDscCoverage
kernel32.dll, kernelbase.dll, normaliz.dll, vertdll.dllVanara.PInvoke.Kernel32Coverage
ktmw32.dllVanara.PInvoke.KtmW32Coverage
Lz32.dllVanara.PInvoke.Lz32Coverage
magnification.dllVanara.PInvoke.MagnificationCoverage
mpr.dllVanara.PInvoke.MprCoverage
msctf.dll, input.dll, msimtf.dllVanara.PInvoke.TextServicesFrameworkCoverage
Msi.dllVanara.PInvoke.MsiCoverage
avicap32.dll, avifil32.dll, msacm32.dll, msvfw32.dll, winmm.dllVanara.PInvoke.MultimediaCoverage
netapi32.dllVanara.PInvoke.NetApi32Coverage
netprofm.dllVanara.PInvoke.NetListMgrCoverage
NewDev.dllVanara.PInvoke.NewDevCoverage
ntdll.dllVanara.PInvoke.NTDllCoverage
ntdsapi.dllVanara.PInvoke.NTDSApiCoverage
ole32.dll, oleaut32.dll, propsys.dllVanara.PInvoke.OleCoverage
oleacc.dllVanara.PInvoke.AccessibilityCoverage
OleDlg.dllVanara.PInvoke.OleDlgCoverage
opcservices.dllVanara.PInvoke.OpcCoverage
P2P.dllVanara.PInvoke.P2PCoverage
pdh.dllVanara.PInvoke.PdhCoverage
PeerDist.dllVanara.PInvoke.PeerDistCoverage
powrprof.dllVanara.PInvoke.PowrProfCoverage
ProjectedFSLib.dllVanara.PInvoke.ProjectedFSLibCoverage
qmgr.dllVanara.PInvoke.BITSCoverage
rpcrt4.dllVanara.PInvoke.RpcCoverage
RstrtMgr.dllVanara.PInvoke.RstrtMgrCoverage
SearchApiVanara.PInvoke.SearchApiCoverage
SetupAPI.dllVanara.PInvoke.SetupAPICoverage
SHCore.dllVanara.PInvoke.SHCoreCoverage
shell32.dll, url.dllVanara.PInvoke.Shell32Coverage
shlwapi.dllVanara.PInvoke.ShlwApiCoverage
taskschd.dll, mstask.dllVanara.PInvoke.TaskSchdCoverage
UrlMon.dllVanara.PInvoke.UrlMonCoverage
user32.dllVanara.PInvoke.User32Coverage
UserEnv.dllVanara.PInvoke.UserEnvCoverage
uxtheme.dllVanara.PInvoke.UxThemeCoverage
Version.dllVanara.PInvoke.VersionCoverage
virtdisk.dllVanara.PInvoke.VirtDiskCoverage
WcmApi.dllVanara.PInvoke.WcmApiCoverage
WcnApi.dllVanara.PInvoke.WcnApiCoverage
wer.dllVanara.PInvoke.WerCoverage
WinBio.dllVanara.PInvoke.WinBioCoverage
wininet.dllVanara.PInvoke.WinINetCoverage
winspool.drv, prntvpt.dllVanara.PInvoke.PrintingCoverage
wintrust.dllVanara.PInvoke.WinTrustCoverage
WlanApi.dll, Wlanui.dllVanara.PInvoke.WlanApiCoverage
ws2_32.dllVanara.PInvoke.Ws2_32Coverage
WsmSvc.dllVanara.PInvoke.WsmSvcCoverage
WTSApi32.dllVanara.PInvoke.WTSApi32Coverage

支持的程序集

Assembly   NuGet Link   Description
Vanara.BITS.NET classes to access Background Intelligent Transfer Service (BITS) functionality. Intelligently uses most recent library functions and gracefully fails when new features are not available on older OS versions.
Vanara.CoreThis library includes shared methods, structures and constants for use throughout the Vanara assemblies. Think of it as windows.h with some useful extensions. It includes:
* Extension methods for working with enumerated types (enum), FILETIME, and method and property extractions via reflection
* Extension and helper methods to marshaling structures arrays and strings
* SafeHandle based classes for working with memory allocated via CoTaskMem, HGlobal, or Local calls that handles packing and extracting arrays, structures and raw memory
* Safe pinning of objects in memory
* Memory stream based on marshaled memory
Vanara.PInvoke.SharedShared methods, structures and constants for use throughout the Vanara.PInvoke assemblies. Includes:
* IEnumerable helpers for COM enumerations
* Custom marshaler for CoTaskMem pointers
* Enhanced error results classes for HRESULT, Win32Error and NTStatus
* Standard windows.h macros (e.g. HIWORD, MAKELONG, etc.)
* Overlapped method wrapper
* Resource ID holder
* Shared structures and enums (see release notes)
Vanara.SecurityClasses for security related items derived from the Vanara PInvoke libraries. Includes extension methods for Active Directory and access control classes, methods for working with accounts, UAC, privileges, system access, impersonation and SIDs, and a full LSA wrapper.
Vanara.SystemServicesClasses for system related items derived from the Vanara PInvoke libraries. Includes extensions for Process (privileges and elavation), FileInfo (compression info), Shared Network Drives and Devices, and ServiceController (SetStartType) that pull extended information through native API calls.
Vanara.VirtualDisk.NET classes to manage Windows Virtual Storage (VHD and VHDX) using P/Invoke functions from VirtDisk.dll.
Vanara.Windows.FormsClasses for user interface related items derived from the Vanara PInvoke libraries. Includes extensions for almost all common controls to give post Vista capabilities, WinForms controls (panel, commandlink, enhanced combo boxes, IPAddress, split button, trackbar and themed controls), shutdown/restart/lock control, buffered painting, resource files, access control editor, simplifed designer framework for Windows.Forms.
Vanara.Windows.ShellClasses for Windows Shell items derived from the Vanara PInvoke libraries. Includes shell items, files, icons, links, and taskbar lists.

链接

示例代码

There are numerous examples in the UnitTest folder and in the WinClassicSamplesCS project that recreates the Windows Samples in C# using Vanara.

除非注明,文章均由 Dotnet9 整理发布,欢迎转载。

转载请注明:
作者:Dotnet9
链接:https://dotnet9.com/18539.html
来源:Dotnet9
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发表评论

登录后才能评论