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

visual|程序|程序员|命名空间

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 As 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 As New 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。

时间: 2024-09-30 05:47:38

向Visual Basic程序员介绍My命名空间(二)的相关文章

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

visual|程序|程序员|命名空间 Excerpted from "Microsoft Visual Basic Programmer's Introduction to Whidbey" by Sean Campbell, Scott Swigart, Kris Horrocks, Derek Hatchard, and Peter Bernhardt. Publisher, Microsoft Press, ISBN # 0-7356-2058-X. 2004, Microsof

向Visual Basic程序员介绍泛型(二)

visual|程序|程序员 (接上篇) 正如你所见,泛型使用起来很简单.强类型化的代码可以避免运行时错误:智能感知会工作得更好.虽然使用泛型已经有非常充分的理由,不过使用泛型还有更多的优点:性能和代码重用. 将泛型技术引入.Net框架的一个主要原因是为了提高性能.比如集合类可以比以前工作得更快,因为编译器能够针对集合所储存的类型进行优化.下面的代码比较了数组.ArrayList以及泛型List的性能: txtOutput.Text = "Performance" & vbCrL

向Visual Basic程序员介绍泛型(一)

visual|程序|程序员 此文档是Sean Campbell, Scott Swigart, Kris Horrocks, Derek Hatchard, and Peter Bernhardt.等人创作的<向Microsoft Visual Basic程序员介绍Whidbey>一书中的样章,版权归原作者和出版社所有.转载请注明此声明. 本文用通俗的用语和大量的实例向Visual Basic程序员介绍了下一版Visual Basic.Net中将要增加的新功能--泛型.此文章可以帮助广大VB用

《Visual Studio程序员箴言》----1.2 滚动与导航

1.2 滚动与导航 Visual Studio程序员箴言 能够查看代码并将光标移到所关注的任意行,与能够尽可能轻松地输入代码同样重要. 1.2.1 滚动 我们都习惯使用鼠标滚轮来滚动编辑器内的代码和文本.以下技巧介绍了一些新的键盘快捷键,可改善你对滚动查看的体验.此外还介绍了如何隐藏所有的滚动条.说不定什么时候这些技巧就会派上用场. 技巧1.13 使用鼠标滚轮在各个方向上滚动 您知道可以按鼠标滚轮并把它当作第三个按键来用吗?对于很多带有编辑器的应用程序来说,按下鼠标滚轮会显示一个图标,指示可以往

《Visual Studio程序员箴言》---- 第2章 让编辑器的使用得心应手 2.1 高级编辑

第2章 让编辑器的使用得心应手 Visual Studio程序员箴言 纵观本书,您会看到我反复测试我最喜欢的功能.但我可以肯定地说,没有什么其他功能比编辑器更能让我想要拥有.编辑器是每个人一直都要使用的功能,我怎么会不想测试它并揭示它的秘密呢? 第1章重点讲述了适用于任意文件类型(甚至是纯文本文件)的基本编辑技巧.本章着重强调的是针对任意语言文件的基本编码技巧.在此,您将了解到关于Microsoft IntelliSense.大纲显示和代码段的技巧. 本文仅用于学习和交流目的,不代表异步社区观点

《Visual Studio程序员箴言》----2.5 代码段

2.5 代码段 Visual Studio程序员箴言与破坏软件相同,我更喜欢做的唯一的事情就是发出通知:"我破坏了软件".例如,我首次接管测试代码段的工作时,我会尝试进行各种意外的操作来破坏UI,例如在代码段名称的位置上输入"Sara wuz here".正如您所期望的那样,我的大部分尝试都是不成功的,但最终我确实发现了一系列能够导致崩溃的键盘快捷键. 软件测试的有趣之处在于,一旦找出一个bug,通常在附近还隐藏着一堆bug.您要做的就是知道如何找出bug的模式.从

《Visual Studio程序员箴言》----2.2 打开文件

2.2 打开文件 Visual Studio程序员箴言 花在IDE上的时间越多,想要进行自定义的愿望就越强烈.对于打开文件也是如此.因为这是一项频繁执行的操作,使用快捷方式或一些省时的自定义设置可以在需要打开文件的时候加快这个过程的速度. 打开文件和编辑器窗口 接下来要讲的这些技巧为在编辑器内打开文件提供了各种自定义方法. 技巧2.22 打开文件时重用同一个编辑器窗口 访问菜单"工具"→"选项"→"环境"→"文档",然后选中&

《Visual Studio程序员箴言》----2.4 IntelliSense

2.4 IntelliSense Visual Studio程序员箴言IntelliSense这个术语指的是编辑器在用户输入代码时为用户提供建议的功能.用户很可能最熟悉的主要IntelliSense功能包括语句完成.参数信息和完成单词. 语句完成.参数信息和完成单词语句完成就是在UI上显示在指定位置能够将哪些合法对象插入到代码中.它也称为列表成员. 完成单词和语句完成非常类似,但不在UI上显示.如果正在输入的方法或对象是唯一的,完成单词功能将会填好单词,即便语句完成并未显示也是如此.完成单词等价

《Visual Studio程序员箴言》----第1章 回顾编辑器的基础知识 1.1 基本编辑

第1章 回顾编辑器的基础知识 Visual Studio程序员箴言Microsoft Visual Studio中的性能改进是从编辑器开始的.无论是输入代码.编辑代码还是删除代码,除了纯粹的输入,无需执行其他的操作了.把这些技巧当作一个储钱罐,在其中存入多余的零钱.即使这些技巧当中的一些只能够为您省下短短的几秒钟时间,这几秒钟也能积少成多,变为几天.几周和几个月.省出这么长的时间用于消遣不是很好吗? 本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,并保留本文的原始链接