明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

向Visual Basic程序員介紹My命名空間(二)

[摘要]My.ComputerMy的另一個(gè)功能塊是Computer對(duì)象。My.Computer對(duì)象可以讓你訪問(wèn)系統(tǒng)底層和應(yīng)用程序所在硬件平臺(tái)的信息。示例應(yīng)用程序的第二個(gè)選項(xiàng)卡展示了你在My.Computer...
My.Computer
My的另一個(gè)功能塊是Computer對(duì)象。My.Computer對(duì)象可以讓你訪問(wèn)系統(tǒng)底層和應(yīng)用程序所在硬件平臺(tái)的信息。示例應(yīng)用程序的第二個(gè)選項(xiàng)卡展示了你在My.Computer對(duì)象中能找到的有趣屬性。



圖三

My.Computer 選項(xiàng)卡

控制這個(gè)網(wǎng)格的代碼如下:

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選項(xiàng)卡中的網(wǎng)格控件的代碼非常相似。用一個(gè)類型化的數(shù)據(jù)集來(lái)裝載My.Computer對(duì)象屬性中獲得的值,并綁定到一個(gè)表格控件。

My.Computer對(duì)象的元素不是都能夠顯示在表格控件里。下表列出的項(xiàng)目包括沒(méi)有在表格控件里顯示的屬性或方法。

My.Computer

屬性/方法 描述

Clock
允許你訪問(wèn)當(dāng)前中時(shí)區(qū)時(shí)間和本地時(shí)間,以及計(jì)數(shù)刻度。

EventLogs
允許你訪問(wèn)本地事件日志信息以及創(chuàng)建或刪除事件日志。

FileSystem
允許你進(jìn)行許多IO操作,如復(fù)制文件、目錄,移動(dòng)文件、目錄,讀取或?qū)懭胛募。一般情況只需要一行代碼。

Keyboard
允許你獲取當(dāng)前鍵盤上某些案件的狀態(tài)。比如獲取CTRL鍵、SHIFT鍵或ATL鍵是否被按下,或者CAPS LOCK/SCROLL LOCK是否處于打開(kāi)狀態(tài)等。

Mouse
允許你獲取鼠標(biāo)的狀態(tài)以及它所附帶的特定的硬件特征,如有幾個(gè)按鍵,是否帶有滾論等。

Name
告訴你當(dāng)前正運(yùn)行的本地計(jì)算機(jī)的名稱。

Network
允許你訪問(wèn)本地計(jì)算機(jī)的IP地址信息,本地計(jì)算機(jī)的連接狀態(tài),還有Ping一個(gè)地址的功能。

Operating System
允許你訪問(wèn)本地計(jì)算機(jī)平臺(tái)和版本的信息。

Registry
允許你訪問(wèn)注冊(cè)表,并提供讀取和寫(xiě)入注冊(cè)表的功能。

Screen
允許你訪問(wèn)系統(tǒng)附帶的監(jiān)視器以及顯示屬性,如BitsPerPixel和WorkingArea等。


My.Computer在開(kāi)發(fā)中的相關(guān)應(yīng)用

My.Computer提供給你很多訪問(wèn)系統(tǒng)底層的功能,你可以用在很多方面。比如你可以用Network屬性和其相關(guān)的Ping、PingWithDetails方法輕易地Ping一個(gè)網(wǎng)絡(luò)地址。

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

這段代碼最關(guān)鍵的部分是My.Computer.Network.PingWithDetails()。這行代碼返回一個(gè)PingResult對(duì)象,其中包含了標(biāo)準(zhǔn)Ping動(dòng)作所返回的數(shù)據(jù)。如果最少一次Ping操作成功的話,平均響應(yīng)時(shí)間,獲得的字節(jié)數(shù),總Ping數(shù)目和成功數(shù)目都會(huì)顯示在一個(gè)消息框中。My.Computer.Network還提供一個(gè)簡(jiǎn)化版的Ping,只返回True或False以示Ping成功與否。像這樣Ping一個(gè)地址的功能可以讓你方便地確定是否能與服務(wù)器正式建立通信。通過(guò)使用My.Computer.Network.ConnectionStatus,你還可以方便地確定當(dāng)前網(wǎng)絡(luò)連接的狀態(tài)。ConnectionStatus屬性根據(jù)計(jì)算機(jī)現(xiàn)在是否有網(wǎng)絡(luò)連接而返回True或False。

My.Computer另一個(gè)很好的應(yīng)用是在需要訪問(wèn)文件系統(tǒng)的時(shí)候。My.Computer.FileSystem提供給你更好的訪問(wèn)文件系統(tǒng)的方法,所需的代碼比用VB.NET來(lái)實(shí)現(xiàn)更少。用My.Computer.FileSystem,你可以只用一行代碼完成下列任務(wù)。

· 在文件后面附加文本。

· 從文件中讀取所有文本。

· 復(fù)制文件夾時(shí)創(chuàng)建所有完整路徑所需的父文件夾。

· 移動(dòng)文件夾時(shí)創(chuàng)建所有完整路徑所需的父文件夾。

你還能用Microsoft.VisualBasic.FileIO命名空間中的類型簡(jiǎn)化文件夾、文件和驅(qū)動(dòng)器的操作。這些類型一般都是My.Computer.FileSystem對(duì)象的屬性和方法返回的類型。

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

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

如果你想讀取一個(gè)文件的全部文本,只需下列代碼即可做到。

My.Computer.FileSystem.ReadAllText(filePath)

復(fù)制和移動(dòng)文件夾變得非常容易。

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

上面這行代碼將文件夾從sourcePath復(fù)制到targetPath。最后兩個(gè)布爾型參數(shù)指定targetPath是否要覆蓋已經(jīng)存在的文件夾以及指定是否需要?jiǎng)?chuàng)建所需的父文件夾。

剛才提到過(guò)FileSystem對(duì)象的許多屬性和方法都可以返回Drive、Folder或File類型的對(duì)象。這些Microsoft.VisualBasic.FileIO名字空間中的對(duì)象封裝了許多新的屬性和方法,可以讓一般的編程工作得到簡(jiǎn)化。比如可以用一行代碼可以取得“我得文檔”文件夾所在的驅(qū)動(dòng)器。

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

更重要的是你可以獲得“我得文檔”文件夾所在的驅(qū)動(dòng)器所剩余的磁盤空間。

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

用文件對(duì)象對(duì)特定文件或文件夾的操作同樣非常容易。比如你可以用一行代碼輕松地重名名文件。

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

My.User
My名字空間的下一個(gè)功能塊是User對(duì)象。My.User對(duì)象允許你獲取當(dāng)前登錄用戶的信息如用戶名,域名,以及查詢他們所屬的組群。



圖 3

My.User 選項(xiàng)卡

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

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())

這段代碼訪問(wèn)了當(dāng)前用戶的信息,這非常簡(jiǎn)單。你要做的所有事情就是訪問(wèn)User對(duì)象的屬性。User對(duì)象是由下列屬性或方法組成的。

My.User

屬性/方法 描述

DisplayName
允許你訪問(wèn)當(dāng)前登錄用戶的顯示名稱。

DomainName
允許你訪問(wèn)當(dāng)前登錄用戶所屬的域名,如果他屬于某個(gè)域的話。

IsInRole
允許你查詢用戶是否屬于一個(gè)特定的角色。

UserName
允許你訪問(wèn)當(dāng)前登錄用戶的用戶名。

WindowsRole
WindowsRole是一個(gè)包含當(dāng)前登錄用戶帳號(hào)所屬的全部角色/組群信息的集合。


My.User在開(kāi)發(fā)中的相關(guān)應(yīng)用

My.User能夠給你相當(dāng)多的關(guān)于當(dāng)前登錄用戶的信息。在很多方面,My所提供的User對(duì)象都是學(xué)習(xí)或使用.NET Framework的絕佳捷徑之一。

在以前版本的.NET Framework中,如果你想訪問(wèn)類似My.User所提供的功能,你必須寫(xiě)下面這么多代碼。

Imports System.Security.Principal

Imports System.Threading.Thread



Dim winPrin As WindowsPrincipal = Thread.CurrentPrincipal

MessageBox.Show(winPrin.Identity.Name)

或者你得寫(xiě)成這樣

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

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

My.User.UserName

這是一個(gè)用My簡(jiǎn)化對(duì).NET Framework操作的一個(gè)經(jīng)典例子。很多開(kāi)發(fā)人員第一次面對(duì)Framework時(shí),不會(huì)本能地想到要從Principal對(duì)象或從當(dāng)前線程取得進(jìn)程身份才能獲得當(dāng)前登錄的用戶的帳號(hào)名稱。很多開(kāi)發(fā)人員以為這種信息肯定是在更高級(jí)的抽象層次上才能得到。現(xiàn)在用My,獲取這種信息既簡(jiǎn)單又快速。

My.WebServices和 My.Forms
接下來(lái)你將要學(xué)到 My命名空間另外兩個(gè)主要功能,它們是My.WebServices和My.Forms。在進(jìn)入這一節(jié)之前,我們先做一個(gè)簡(jiǎn)短的概述。

My.WebServices讓你可以用和訪問(wèn)數(shù)據(jù)源一樣簡(jiǎn)單的語(yǔ)法訪問(wèn)在項(xiàng)目中引用的Web服務(wù)。

dgOrders.DataSource = _

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

如果用.NET Framework 1.0/1.1,要想做到上面那行代碼的功能,你必須創(chuàng)建一個(gè)WebService的實(shí)例。用這種My.WebServices提供的功能可以快捷訪問(wèn)所有添加到Web引用的Web服務(wù)。

最后一個(gè)重點(diǎn)My.Form將帶回一種在Visual Basic桌面程序中出現(xiàn),并暫時(shí)消失在VB.NET中的標(biāo)志性的編程風(fēng)格。如果你曾經(jīng)用VB6開(kāi)發(fā)過(guò),你肯定知道下面這種代碼,如果你的項(xiàng)目需要顯示某個(gè)窗體:

Form2.Show

在VB.NET時(shí)代,你不能再用這種簡(jiǎn)單的語(yǔ)法了。在VB.NET中只能用下列代碼顯示一個(gè)窗體。

Dim frm1 As New Form1()

frm1.Show()

使用My.Forms,項(xiàng)目中所有的窗體都變成Forms集合的成員。另外如果你想訪問(wèn)某個(gè)窗體默認(rèn)的實(shí)例,你根本不需要使用My.Forms。就是說(shuō)下面的代碼是等價(jià)的。

My.Forms.Form2.Show()

Form2.Show()

在接下來(lái)的章節(jié)里,你將學(xué)到更多用此方法顯示窗體的功能(譯注:可惜我們看不到了)。

如果你想看一些My.WebServices和My.Forms的例子,你可以看看示例程序相關(guān)的選項(xiàng)卡。所有這些工能將在本書(shū)的后邊詳細(xì)地?cái)⑹觥#ū疚臋n只是此書(shū)的樣章,所以到此為止了,想看后面請(qǐng)到亞馬孫書(shū)店購(gòu)買此書(shū))

結(jié)論

My命名空間對(duì)于一個(gè)開(kāi)發(fā)人員來(lái)說(shuō)主要有四項(xiàng)功能。首先它提供很多了以前版本的.NET Framework沒(méi)有的功能。第二,它提供了很多快速訪問(wèn).NET Framework的BCL的快捷方式。第三,在一定程度上,它讓你想問(wèn)題時(shí)能將“計(jì)算機(jī)”類的詞當(dāng)作邏輯實(shí)體來(lái)操作。第四,它讓一些你熟悉的舊語(yǔ)法回歸到了Visual Basic中,比如Form1.