向Visual Basic程序员介绍My命名空间(二)

My.Computer

My 的另一个功能块是 Computer 对象。 My.Computer 对象可以让你访问系统底层和应用程序所在硬件平台的信息。示例应用程序的第二个选项卡展示了你在 My.Computer 对象中能找到的有趣属性。

图三

My.Computer 选项卡

控制这个网格的代码如下:

myAppDS.MyComputer.AddMyComputerRow( "Clock" , _

My .Computer.Clock.LocalTime)

myAppDS.MyComputer.AddMyComputerRow( "GMT Time" , _

My .Computer.Clock.GmtTime)

myAppDS.MyComputer.AddMyComputerRow( "Tick Count" , _

My .Computer.Clock.TickCount)

myAppDS.MyComputer.AddMyComputerRow( "GMT Time" , _

My .Computer.EventLogs.Item( "Application" ).ReadEntries().Item(1).Message)

myAppDS.MyComputer.AddMyComputerRow( "CRTL Key Down" , _

My .Computer.Keyboard.CtrlKeyDown.ToString())

myAppDS.MyComputer.AddMyComputerRow( "Button Count" , _

My .Computer.Mouse.ButtonCount)

myAppDS.MyComputer.AddMyComputerRow( "Buttons Swapped" , _

My .Computer.Mouse.ButtonsSwapped)

myAppDS.MyComputer.AddMyComputerRow( "Mouse Exists" , _

My .Computer.Mouse.Exists.ToString())

myAppDS.MyComputer.AddMyComputerRow( "Wheel Scroll Lines" , _

My .Computer.Mouse.WheelScrollLines.ToString())

myAppDS.MyComputer.AddMyComputerRow( "Wheel Exists" , _

My .Computer.Mouse.WheelExists)

myAppDS.MyComputer.AddMyComputerRow( "Computer Name" , _

My .Computer.Name)

myAppDS.MyComputer.AddMyComputerRow( "Connection Status" , _

My .Computer.Network.ConnectionStatus)

myAppDS.MyComputer.AddMyComputerRow( "Connection Status" , _

My .Computer.Network.IPAddresses(0).ToString())

myAppDS.MyComputer.AddMyComputerRow( "Operating System Platform" , _

My .Computer.OperatingSystem.Platform)

myAppDS.MyComputer.AddMyComputerRow( "Version" , _

My .Computer.OperatingSystem.Version.Major & "." & _

My .Computer.OperatingSystem.Version.Minor & "." & _

My .Computer.OperatingSystem.Version.Revision & "." & _

My .Computer.OperatingSystem.Version.Build)

myAppDS.MyComputer.AddMyComputerRow( "Full Name HKEY_CURRENT_USER" , _

My .Computer.Registry.CurrentUser.FullName)

myAppDS.MyComputer.AddMyComputerRow( "Device Name" , _

My .Computer.Screen.DeviceName)

这段代码与控制 My.Application 选项卡中的网格控件的代码非常相似。用一个类型化的数据集来装载 My.Computer 对象属性中获得的值,并绑定到一个表格控件。

My.Computer 对象的元素不是都能够显示在表格控件里。下表列出的项目包括没有在表格控件里显示的属性或方法。

My.Computer

属性 / 方法 描述

Clock

|

允许你访问当前中时区时间和本地时间,以及计数刻度。

---|---

EventLogs

|

允许你访问本地事件日志信息以及创建或删除事件日志。

** FileSystem **

|

允许你进行许多 IO 操作,如复制文件、目录,移动文件、目录,读取或写入文件等。一般情况只需要一行代码。

Keyboard

|

允许你获取当前键盘上某些案件的状态。比如获取 CTRL 键、 SHIFT 键或 ATL 键是否被按下,或者 CAPS LOCK/SCROLL LOCK 是否处于打开状态等。

Mouse

|

允许你获取鼠标的状态以及它所附带的特定的硬件特征,如有几个按键,是否带有滚论等。

Name

|

告诉你当前正运行的本地计算机的名称。

Network

|

允许你访问本地计算机的 IP 地址信息,本地计算机的连接状态,还有 Ping 一个地址的功能。

Operating System

|

允许你访问本地计算机平台和版本的信息。

Registry

|

允许你访问注册表,并提供读取和写入注册表的功能。

Screen

|

允许你访问系统附带的监视器以及显示属性,如 BitsPerPixel 和 WorkingArea 等。

** My.Computer ** 在开发中的相关应用

My.Computer 提供给你很多访问系统底层的功能,你可以用在很多方面。比如你可以用 Network 属性和其相关的 Ping 、 PingWithDetails 方法轻易地 Ping 一个网络地址。

Dim pingResult As Microsoft.VisualBasic.Net.PingResult = _

My .Computer.Network.PingWithDetails( "www.3leaf.com" )

If pingResult.PingSuccesses > 0 Then

Dim pingDetails As String = "Average Ping Time in MS: " & _

ingResult.AveragePingTimeInMilliseconds & vbCrLf & _

"Bytes Received: " & pingResult.BytesReceived.ToString() & vbCrLf & _

"IP Address: " & pingResult.IPAddress.ToString() & vbCrLf &_

"Ping Attempts: " & pingResult.PingAttempts.ToString() & vbCrLf & _

"Ping Successes: " & pingResult.PingSuccesses.ToString()

MessageBox.Show(pingDetails)

Else

MessageBox.Show( " Ping of www.3leaf.com was not successful" )

End If

这段代码最关键的部分是 My.Computer.Network.PingWithDetails() 。 这行代码返回一个 PingResult 对象,其中包含了标准 Ping 动作所返回的数据。如果最少一次 Ping 操作成功的话,平均响应时间,获得的字节数,总 Ping 数目和成功数目都会显示在一个消息框中。 My.Computer.Network 还提供一个简化版的 Ping ,只返回 True 或 False 以示 Ping 成功与否。像这样 Ping 一个地址的功能可以让你方便地确定是否能与服务器正式建立通信。通过使用 My.Computer.Network.ConnectionStatus , 你还可以方便地确定当前网络连接的状态。 ConnectionStatus 属性根据计算机现在是否有网络连接而返回 True 或 False 。

My.Computer 另一个很好的应用是在需要访问文件系统的时候。 My.Computer.FileSystem 提供给你更好的访问文件系统的方法,所需的代码比用 VB.NET 来实现更少。用 My.Computer.FileSystem ,你可以只用一行代码完成下列任务。

· 在文件后面附加文本。

· 从文件中读取所有文本。

· 复制文件夹时创建所有完整路径所需的父文件夹。

· 移动文件夹时创建所有完整路径所需的父文件夹。

你还能用 Microsoft.VisualBasic.FileIO 命名空间中的类型简化文件夹、文件和驱动器的操作。这些类型一般都是 My.Computer.FileSystem 对象的属性和方法返回的类型。

下面的例子是用 My 在文件末尾附加文本所需的全部代码。

My .Computer.FileSystem.AppendText(filePath, “Hello from " & _
“ My.Computer.FileSystem” )

如果你想读取一个文件的全部文本,只需下列代码即可做到。

My .Computer.FileSystem.ReadAllText(filePath)

复制和移动文件夹变得非常容易。

My .Computer.FileSystem.CopyFolder(sourcePath, targetPath, True , True )

上面这行代码将文件夹从 sourcePath 复制到 targetPath 。最后两个布尔型参数指定 targetPath 是否要覆盖已经存在的文件夹以及指定是否需要创建所需的父文件夹。

刚才提到过 FileSystem 对象的许多属性和方法都可以返回 Drive 、 Folder 或 File 类型的对象。这些 Microsoft.VisualBasic.FileIO 名字空间中的对象封装了许多新的属性和方法,可以让一般的编程工作得到简化。比如可以用一行代码可以取得“我得文档”文件夹所在的驱动器。

My .Computer.FileSystem.SpecialFolders.MyDocuments.Drive.DriveName

更重要的是你可以获得“我得文档”文件夹所在的驱动器所剩余的磁盘空间。

My .Computer.FileSystem.SpecialFolders.MyDocuments.Drive.FreeSpace

用文件对象对特定文件或文件夹的操作同样非常容易。比如你可以用一行代码轻松地重名名文件。

My .Computer.FileSystem.SpecialFolders.MyDocuments.Drive.FreeSpace

My.User

My 名字空间的下一个功能块是 User 对象。 My.User 对象允许你获取当前登录用户的信息如用户名,域名,以及查询他们所属的组群。

图 3

My.User 选项卡

控制表格控件的代码如下:

myAppDS.MyUser.AddMyUserRow( "Display Name" , _

My .User.DisplayName)

myAppDS.MyUser.AddMyUserRow( "Domain Name" , _

My .User.DomainName)

myAppDS.MyUser.AddMyUserRow( "User Name" , _

My .User.UserName)

myAppDS.MyUser.AddMyUserRow( "Windows Role" , _

My .User.WindowsRoles(0).ToString())

这段代码访问了当前用户的信息,这非常简单。你要做的所有事情就是访问 User 对象的属性。 User 对象是由下列属性或方法组成的。

My.User

属性 / 方法 描述

DisplayName

|

允许你访问当前登录用户的显示名称。

---|---

DomainName

|

允许你访问当前登录用户所属的域名,如果他属于某个域的话。

IsInRole

|

允许你查询用户是否属于一个特定的角色。

UserName

|

允许你访问当前登录用户的用户名。

WindowsRole

|

WindowsRole 是一个包含当前登录用户帐号所属的全部角色 / 组群信息的集合。

** My.User ** 在开发中的相关应用

My.User 能够给你相当多的关于当前登录用户的信息。在很多方面, My 所提供的 User 对象都是学习或使用 .NET Framework 的绝佳捷径之一。

在以前版本的 .NET Framework 中,如果你想访问类似 My.User 所提供的功能,你必须写下面这么多代码。

Imports System.Security.Principal

Imports System.Threading.Thread

Dim winPrin A s WindowsPrincipal = Thread.CurrentPrincipal

MessageBox.Show(winPrin.Identity.Name)

或者你得写成这样

MessageBox.Show(System.Threading.Thread.CurrentPrincipal.Identity.Name)

但是,在使用了 My 之后就变得如此直观。

My .User.UserName

这是一个用 My 简化对 .NET Framework 操作的一个经典例子。很多开发人员第一次面对 Framework 时,不会本能地想到要从 Principal 对象或从当前线程取得进程身份才能获得当前登录的用户的帐号名称。很多开发人员以为这种信息肯定是在更高级的抽象层次上才能得到。现在用 My ,获取这种信息既简单又快速。

My.WebServices 和 My.Forms

接下来你将要学到 My 命名空间另外两个主要功能,它们是 My.WebServices 和 My.Forms 。在进入这一节之前,我们先做一个简短的概述。

My.WebServices 让你可以用和访问数据源一样简单的语法访问在项目中引用的 Web 服务。

dgOrders.DataSource = _

My .WebServices.Northwind.GetOrders().Tables( "Orders" )

如果用 .NET Framework 1.0/1.1 ,要想做到上面那行代码的功能,你必须创建一个 WebService 的实例。用这种 My.WebServices 提供的功能可以快捷访问所有添加到 Web 引用的 Web 服务。

最后一个重点 My.Form 将带回一种在 Visual Basic 桌面程序中出现,并暂时消失在 VB.NET 中的标志性的编程风格。如果你曾经用 VB6 开发过,你肯定知道下面这种代码,如果你的项目需要显示某个窗体:

Form2.Show

在 VB.NET 时代,你不能再用这种简单的语法了。在 VB.NET 中只能用下列代码显示一个窗体。

Dim frm1 A s N ew Form1()

frm1.Show()

使用 My.Forms ,项目中所有的窗体都变成 Forms 集合的成员。另外如果你想访问某个窗体默认的实例,你根本不需要使用 My.Forms 。就是说下面的代码是等价的。

My .Forms.Form2.Show()

Form2.Show()

在接下来的章节里,你将学到更多用此方法显示窗体的功能(译注:可惜我们看不到了)。

如果你想看一些 My.WebServices 和 My.Forms 的例子,你可以看看示例程序相关的选项卡。所有这些工能将在本书的后边详细地叙述。(本文档只是此书的样章,所以到此为止了,想看后面请到亚马孙书店购买此书)

结论

My 命名空间对于一个开发人员来说主要有四项功能。首先它提供很多了以前版本的 .NET Framework 没有的功能。第二,它提供了很多快速访问 .NET Framework 的 BCL 的快捷方式。第三,在一定程度上,它让你想问题时能将“计算机”类的词当作逻辑实体来操作。第四,它让一些你熟悉的旧语法回归到了 Visual Basic 中,比如 Form1.Show 。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus