知识大全 使用.NET框架类替代API调用的问题

Posted

篇首语:送饥者一条鱼,只管一天不饿;教他学会捕鱼,能使他永不受饿。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用.NET框架类替代API调用的问题相关的知识,希望对你有一定的参考价值。

使用.NET框架类替代API调用的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   避免使用 Win API  如果您是一位 Microsoft Visual Basic® 开发人员 您就无法避免调用 Win API 开发人员有太多的任务需要完成 而 Visual Basic 却不能提供任何实现方法 例如 在 Visual Basic 中 您很难完成以下任务      确定文件版本信息   在注册表的任何位置进行读取和写入操作   确定用户的特定文件夹 例如 Microsoft Windows® 收藏夹或个人文件夹   检索所有可用驱动器的列表   查找用户的登录名或计算机名   检索所有打开窗口的列表   如果仅使用 Visual Basic 中提供的工具 您不可能解决上述任何问题 对于每个问题 开发人员都需要使用 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 中那样简单 例如 对结构的工作方式的限制使得很难将结构传递给 API 调用 此外 由于数据类型的更改以及更严格的类型转换 Visual Basic 的 API 声明也需要进行更改   根据语言的不同 使用 Windows API(以及通常情况下使用的外部代码)的技巧也不尽相同 如果您打算在多 NET 语言环境中工作 则需要掌握各种语言的不同技巧   调用 Windows API 的代码要求调用这些代码的用户具有执行此操作的权限 这将影响应用程序的安全保护方案 您需要对此要求提前做出安排   这个问题很简单 尽管您可以在 Visual Basic NET 应用程序中继续使用 Windows API 但通常情况下 您应当尽可能寻找由 NET 框架提供的替代品 虽然 NET 框架的目的并不是要阻止您直接使用 Windows 的功能 但框架的确提供了大量的类 可以帮助您放弃对 Windows API 调用的依赖     如果能够给出一个完整列表 列出 Win API 调用以及在 NET 框架中完成相同任务的相应方法(如果有) 可能会很方便 不过本文不涉及此任务 在本文中 您将了解到一些由 NET 框架提供的特定且非常有用的类 它们可以解决您的问题 在每个示例中 本文所讨论的类都可以用来替代一个或多个 Win API 调用 而在 Microsoft Visual Basic 中 您必须调用一个或多个 Win API 才能完成相同的任务      使用注册表  如果您与大多数 Visual Basic 开发人员一样 您会发现 Microsoft Visual Basic for Applications (VBA) 中内置的 SaveSetting GetSetting GetAllSettings 和 DeleteSetting 方法有点儿用处 但却很可能被它们的局限性弄得精疲力尽 所有这些方法都只能在注册表的 HKEY_CURRENT_USER\\Sofare\\VB 和 VBA Program Settings 下的项中使用 如果您要在注册表的其他地方读取或写入注册表项或注册表值 则必须使用复杂的 API 调用 或依靠别人的代码来处理此问题      NET 框架在 Microsoft Win 名称空间中提供了一对功能强大的类(Registry 和 RegistryKey) 从而简化了注册表的使用 即不再需要 API 调用!    作为演示 请在示例项目的主窗体上单击 Work with the Registry(使用注册表)按钮 此窗体提供了 SOFARE\\Microsoft\\Windows\\CurrentVersion\\Run 项的 HKEY_LOCAL_MACHINE 配置单元中所有注册表值的列表 您可以右键单击列表中的任何项 然后选择插入新项 或者编辑或删除选定项 如图 所示     提示 示例窗体也已经过设计 在列表框中按下 Enter 键时 可以编辑当前选定的项 按下 Delete 键可以删除选定项 按下 Insert 键可以添加一个新值 这些项对应于列表框的上下文菜单中的项    >   >     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 Win     Dim reg As RegistryKey = Registry LocalMachine    另一个类是 RegistryKey 它可以完成所有工作 它提供了一组使用 Registry 的方法 表 列出了 RegistryKey 类的所有有用方法      >  RegistryKey 类还提供以下三个属性     Name 检索项的名称   SubkeyCount 检索与该项相关联的子项的数量   ValueCount 检索与该项相关联的项值的数量   示例窗体的 ListLoad 过程将检索所请求项中的所有值 并将检索到的值添加到窗体的列表框中     Private Const conRegKey As String = _   SOFARE\\Microsoft\\Windows\\CurrentVersion\\Run     Private Structure RegData  Public Value As String  Public Data As String    Public Overrides _  Function ToString() As String  Return Me Value  End Function  End Structure    Private Sub ListLoad()  Dim reg As RegistryKey = Registry LocalMachine  Dim astrValues() As String  Dim strValue As String  Dim rd As RegData     清除列表框中的现有项   lstItems BeginUpdate()  lstItems Items Clear()     打开注册表项 然后使用   该项的值加载列表框   reg = reg OpenSubKey(conRegKey)  astrValues = reg GetValueNames()  For Each strValue In astrValues  rd Value = strValue ToString  rd Data = reg GetValue(strValue)  lstItems Items Add(rd)  Next  lstItems EndUpdate()  End Sub    要编辑示例窗体中的值或添加新值 需要运行以下代码     Private Sub AddOrEdit( _  ByVal rd As RegData _  ByVal Mode As frmAddValue AccessMode)  Dim reg As RegistryKey = Registry LocalMachine  Dim frm As New frmAddValue(Mode)    frm KeyName = rd Value  frm KeyData = rd Data    If frm ShowDialog() = DialogResult OK Then  If frm KeyName <> String Empty Then  reg = reg OpenSubKey(conRegKey True)  reg SetValue(frm KeyName frm KeyData)  ListLoad()  End If  End If  End Sub    此代码将再次打开注册表项 这次将请求写入项值的权限(此请求由 OpenSubKey 的第二个参数发出) 然后 代码将调用 SetValue 方法 传递图 所示的对话框窗体中的项名和项值 为简化工作 可以使用 SetValue 方法添加新值或修改现有值 如果项值不存在 SetValue 方法将添加一个项值      要删除项值 示例窗体将调用以下代码   Private Sub DeleteKey(ByVal rd As RegData)  Dim strText As String  Dim reg As RegistryKey = Registry LocalMachine    If lstItems SelectedIndex = Then  Exit Sub  End If     删除选定的项   strText = String Format( _   Are you sure you want to delete ? _  rd Value)    If MessageBox Show(strText _   Delete Registry Value _  MessageBoxButtons YesNo _  MessageBoxIcon Question) = DialogResult Yes Then   打开项 允许写入   reg = reg OpenSubKey(conRegKey True)  reg DeleteValue(rd Value)   重新加载列表框   ListLoad()  End If  End Sub    此代码将打开项并请求对其执行写入操作 然后将调用 DeleteValue 方法删除选定的值     有了示例窗体提供的信息和 NET 框架附带的文档 便可以轻松地完成与注册表相关的任何任务 而不必使用 Windows API 这是一个简单的对象模型 但它提供的功能比 Visual Basic 开发人员先前所拥有的功能更强大     提示 如果具有必要的权限 您还可以使用远程计算机上的注册表 您可以调用 cha138/Article/program/Java/hx/201311/26384

相关参考

知识大全 C#中调用Windows API的技术要点

C#中调用WindowsAPI的技术要点  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Net

知识大全 使用eclipse调用.net web service

  以前我用的开发框架都是net现在换成javaEE框架和linux平台还需要一段时间的学习有时在测试工作中需要实现一些功能但是又不会用java实现怎么办呢?这里有一个方法使用net的框架开发webs

知识大全 一个基于API的VB.net串口通讯类

一个基于API的VB.net串口通讯类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  的串口通讯

知识大全 .NET框架类小结

.NET框架类小结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一基本概念  NET框架(Fr

知识大全 .net连接Mysql封装类代码 可直接调用

.net连接Mysql封装类代码可直接调用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!下面是我封

知识大全 微软同步框架中的自定义数据同步基础

  MicrosoftSyncFramework(MSF)为我们提供了进行同步应用开发的基础框架和API这些API即有基于托管代码的也有基于非托管代码的也就是说我们既可以开发基于NET平台使用托管AP

知识大全 Net框架类库中定时器类的使用

Net框架类库中定时器类的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不论在客户端应用程

知识大全 .Net框架类库中定时器类的使用[1]

技巧:.Net框架类库中定时器类的使用[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不论

知识大全 .Net框架类库中定时器类的使用[3]

技巧:.Net框架类库中定时器类的使用[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不像

知识大全 .Net框架类库中定时器类的使用[4]

技巧:.Net框架类库中定时器类的使用[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Sh