繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Windows开发 >> 使用 .NET 框架类替代 API 调用 -- Zt

使用 .NET 框架类替代 API 调用 -- Zt

2004-10-01 08:26:10  作者:  来源:互联网  浏览次数:18  文字大小:【】【】【
简介:摘要:通过学习 Microsoft .NET 框架中某些特定而有用的类,可以减少您对 Win32 API 调用的依赖。本文讨论的每个类都可以代替一个或多个 Win32 API 调用,而在 Microsoft Visual Basic 6.0 中,您必须调用一个或...
关键字:.NET 框架 API Zt

摘要:通过学习 Microsoft .NET 框架中某些特定而有用的类,可以减少您对 Win32 API 调用的依赖。本文讨论的每个类都可以代替一个或多个 Win32 API 调用,而在 Microsoft Visual Basic 6.0 中,您必须调用一个或多个 Win32 API 才能完成相同的任务。 目标查找现有 Win32 API 调用的特定替代品。 了解 Registry 类。 使用 FileVersionInfo 类。 使用环境信息和系统信息。 目录避免使用 Win32 API 使用注册表 使用常用对话框 检索文件版本信息 检索环境信息 总结 避免使用 Win32 API

如果您是一位 Microsoft Visual Basic® 6.0 开发人员,您就无法避免调用 Win32 API。开发人员有太多的任务需要完成,而 Visual Basic 却不能提供任何实现方法。例如,在 Visual Basic 6.0 中,您很难完成以下任务: 确定文件版本信息。

在注册表的任何位置进行读取和写入操作。

确定用户的特定文件夹,例如 Microsoft Windows® 收藏夹或个人文件夹。

检索所有可用驱动器的列表。

查找用户的登录名或计算机名。

检索所有打开窗口的列表。

如果仅使用 Visual Basic 6.0 中提供的工具,您不可能解决上述任何问题。对于每个问题,开发人员都需要使用 Windows API。许多开发人员使用 Windows API 已经找到了完成这些(以及许多其他)任务的方法。

Windows API 存在什么问题?

为什么不继续在 .NET 环境中使用 Windows API 呢?如果使用 .NET 平台调用服务(称为“P/Invoke”),您当然可以这样做。从 Visual Basic 开发人员的角度来说,调用 Windows API 并不比使用他们所熟悉的 Declare 语句困难。不过,在 .NET 环境中使用 Windows API 存在一些比较严重的缺陷,您可能需要考虑采取任何可行的措施来避免这些问题。例如:

.NET 公共语言运行时不会受平台影响。当您使用 Windows API 调用时,您将代码绑定到编写代码的特定平台上(即,相对于其他操作系统的某个特定 Windows 版本或 Windows 本身)。必要时,您需要将代码转换到另一个平台上,而这样做就需要修改使用 API 调用的每行代码。

从 .NET 中调用 Windows API(或 DLL 中的任何非托管代码)不像在 Visual Basic 6.0 中那样简单。例如,对结构的工作方式的限制使得很难将结构传递给 API 调用。此外,由于数据类型的更改以及更严格的类型转换,Visual Basic 6.0 的 API 声明也需要进行更改。

根据语言的不同,使用 Windows API(以及通常情况下使用的外部代码)的技巧也不尽相同。如果您打算在多 .NET 语言环境中工作,则需要掌握各种语言的不同技巧。

调用 Windows API 的代码要求调用这些代码的用户具有执行此操作的权限。这将影响应用程序的安全保护方案,您需要对此要求提前做出安排。

这个问题很简单:尽管您可以在 Visual Basic .NET 应用程序中继续使用 Windows API,但通常情况下,您应当尽可能寻找由 .NET 框架提供的替代品。虽然 .NET 框架的目的并不是要阻止您直接使用 Windows 的功能,但框架的确提供了大量的类,可以帮助您放弃对 Windows API 调用的依赖。

如果能够给出一个完整列表,列出 Win32 API 调用以及在 .NET 框架中完成相同任务的相应方法(如果有),可能会很方便,不过本文不涉及此任务。在本文中,您将了解到一些由 .NET 框架提供的特定且非常有用的类,它们可以解决您的问题。在每个示例中,本文所讨论的类都可以用来替代一个或多个 Win32 API 调用,而在 Microsoft Visual Basic 6.0 中,您必须调用一个或多个 Win32 API 才能完成相同的任务。

使用注册表

如果您与大多数 Visual Basic 6.0 开发人员一样,您会发现 Microsoft Visual Basic for Applications (VBA) 中内置的 SaveSetting、GetSetting、GetAllSettings 和 DeleteSetting 方法有点儿用处,但却很可能被它们的局限性弄得精疲力尽。所有这些方法都只能在注册表的 HKEY_CURRENT_USER\Software\VB 和 VBA Program Settings 下的项中使用。如果您要在注册表的其他地方读取或写入注册表项或注册表值,则必须使用复杂的 API 调用,或依靠别人的代码来处理此问题。

.NET 框架在 Microsoft.Win32 名称空间中提供了一对功能强大的类(Registry 和 RegistryKey),从而简化了注册表的使用,即不再需要 API 调用!

作为演示,请在示例项目的主窗体上单击 Work with the Registry(使用注册表)按钮。此窗体提供了 SOFTWARE\Microsoft\Windows\CurrentVersion\Run 项的 HKEY_LOCAL_MACHINE 配置单元中所有注册表值的列表。您可以右键单击列表中的任何项,然后选择插入新项,或者编辑或删除选定项,如图 1 所示。

提示:示例窗体也已经过设计,在列表框中按下 Enter 键时,可以编辑当前选定的项。按下 Delete 键可以删除选定项,按下 Insert 键可以添加一个新值。这些项对应于列表框的上下文菜单中的项。

图 1:使用 Registry 和 RegistryKey 类轻松检索和修改 Windows 注册表中的信息

.NET 框架提供了两个非常有用的类,使您可以轻松使用 Windows 注册表。第一个类是 Registry,它提供的字段与标准 Registry 配置单元的各字段相对应:

ClassesRoot (HKEY_CLASSES_ROOT)

CurrentConfig (HKEY_CURRENT_CONFIG)

CurrentUser (HKEY_CURRENT_USER)

DynData (HKEY_DYN_DATA)

LocalMachine (HKEY_LOCAL_MACHINE)

PerformanceData (HKEY_PERFORMANCE_DATA)

Users (HKEY_USERS)

要使用 Registry 类,只需检索所需配置单元的引用。示例窗体的 LoadList 过程中包含如下代码,以便使用注册表中的 HKEY_LOCAL_MACHINE 配置单元:

Imports Microsoft.Win32

Dim reg As RegistryKey = Registry.LocalMachine

另一个类是 RegistryKey,它可以完成所有工作。它提供了一组使用 Registry 的方法。表 1 列出了 RegistryKey 类的所有有用方法。

表 1:RegistryKey 类方法

方法

责任编辑:admin
相关文章