2011年1月4日 星期二

My命名空間之My.Computer

My.Computer可能是My命名空間中最有趣的部分了,這一部分封裝了大量訪問系統和硬件信息的功能,操作起來比直接使用.NET Framework或Windows API都方便得多。My.Computer中有很多對象,下面我們分別來介紹。

My.Computer.Audio

Audio對像提供了播放音頻的功能,它既可以從wav等文件播放,也可以從音頻數據流來播放,就是說你可以用它輕鬆播放儲存在資源文件中或者數據庫中的音頻。播放時還可以指定後台播放或等待結束等多種設置。結合My.Resources來使用,更顯得方便無窮。這是一個簡單的播放wav文件的例子:

My.Computer.Audio.Play("c:\ding.wav", AudioPlayMode.BackgroundLoop)


My.Computer.Clipboard

Clipboard對像提供了以強類型方式讀寫剪貼板的功能,比Windows.Forms裡面的剪貼板更加好用。使用Clipboard對象可以直接從剪貼板讀寫音頻、圖像、文本甚至我的電腦中的文件拖放信息。此外,由VB6升級的項目現在將直接使用My.Computer.Clipboard對像升級以前的Clipboard對象,這將解決VB.NET不能升級原先剪貼板功能的缺陷。下面的例子將文本框內的內容複製到剪貼板:

My.Computer.Clipboard.SetText(TextBox1.Text)

My.Computer.Clock

Clock對象是一個獲取時間的工具,它可以直接獲取當地時間、中時區的時間和從當時子時開始的毫秒計數。

My.Computer.FileSystem

這是微軟Visual Basic Team在My.Computer中傾注最多精力的對象,使用它可以充分改善文件操作的複雜程度。FileSystem對像提供了易於理解的操作方式。FileSystem對像中複製文件的方法不但只需要指定目標路徑,還可以幫助你建立目標目錄中不存在的級別。它還特別提供了CopyDirectory的功能,可以複製整個目錄!這正是目前.NET Framework缺乏的功能。同時FileSystem還能提供搜索上級目、子目錄或根目錄的功能,非常體貼。下面例子展示了如何在動畫演示下將文件放入回收站。

My.Computer.FileSystem.DeleteFile("c:\mybigfile.big", True, True)

FileSystem對像還提供了只用一行代碼就可以讀取文本文件內容,或者將所需內容寫入文本文件的功能,現在你不需要再用迷惑人的StreamReader、StreamWriter來讀寫文件了,還不用擔心資源釋放的問題。如下面的例子:

s = My.Computer.FileSystem.ReadAllText("c:\a.txt")

除了可以通過My訪問以外,通過System.IO.FileSystem類也可以完成FileSystem對象的大多數功能,這種方式似乎更適合於使用C#或C++的開發者。

My.Computer.Info

看名字就知道了,這個對象的屬性都是系統信息。如果你想獲得本機物理內存或虛擬內存的總數,剩餘量、操作系統名稱、當前用戶名、本機安裝的文化設置等等,都可以輕鬆使用Info對象,它讓你對應用程序所在的系統瞭如指掌。

My.Computer.Keyboard和My.Computer.Mouse

通過這兩個對象,你可以快速獲得用戶鍵盤的信息,如大寫鎖定、數字鍵盤鎖定等是否打開,以及鼠標有幾個按鍵,是否配備滾輪等。如果你希望你的應用程序能夠做到最體貼用戶,那這些信息是少不了了。下面例子演示獲取用戶的鼠標左右鍵功能是否交換(這樣你就可以知道用戶是不是左撇子,從而提供更體貼的界面,多爽)

Dim f As Boolean = My.Computer.Mouse.ButtonsSwapped

My.Computer.Name

不用多說,這就是本機操作系統安裝時輸入的名稱

My.Computer.Network

這個Network對像充分簡化了最常用的網絡任務,只需要一行代碼,就可以Ping一個地址,或者檢測網絡是否接通。還能用一行代碼下載或上傳文件。比如這個例子就完成了一個下載文件的任務:

If My.Computer.Network.IsAvailable Then
My.Computer.Network.DownloadFile("http://abc.com/x.zip", _
"C:\download")
End If

My.Computer.Port

提供了用一行代碼打開本機串口的功能,還能立刻綁定一個事件監視串口的變化。現在串口編程出奇的簡單,再也不需要MSComm控件了。

My.Computer.Printers

這個Printers對像能夠遍歷本機所安裝的所有打印機,還能找出默認的打印機。通過向默認打印機畫圖一樣的操作,就能開始打印了。這樣的操作會讓你想起VB6時代便利而簡潔的打印操作。下面的例子將在默認打印機上打印一個橢圓。從VB6升級項目時,原來的Printer對像將自動升級為My.Computer.Printers中的相關操作,升級的用戶可以更加放心了。

My.Computer.Printers.DefaultPrinter.DrawEllipse( _
New RectangleF(2, 2, 50, 150), 1)
My.Computer.Printers.DefaultPrinter.Print()

My.Computer.Registry

這個註冊表對象可比Microsoft.Win32空間中的那個版本簡單多了,他提供強類型的路徑支持,還能非常方便地讀寫註冊表。下面的例子是一段內置的代碼片斷,演示了如何判斷某一鍵值是否存在。

Dim exists As Boolean = True

Dim path As String = "Software\Microsoft\TestApp\1.0"

If My.Computer.Registry.CurrentUser.OpenSubKey(path) Is Nothing Then
exists = False
End If

My.Computer.Screen

Screen對象可以獲取屏幕的可視範圍,像素的位數等。比VB6的Screen對像更強的是,它現在支持兩個顯示器。


My.Computer.Registry 物件會提供存取登錄的屬性和方法。

'建立登錄機碼 (Registry Key) 並設定其值
My.Computer.Registry.CurrentUser.CreateSubKey("ApMyTestKey")
My.Computer.Registry.SetValue("HKEY_CURRENT_USER\ApMyTestKey", "MyTestKeyValue", "This is a test value.")
'判斷登錄機碼是否存在值 (讀取登錄機碼的值)
If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\ApMyTestKey", "MyTestKeyValue", Nothing) Is Nothing Then
MsgBox("Value does not exist.")
Else
'刪除登錄機碼
My.Computer.Registry.CurrentUser.DeleteSubKey("ApMyTestKey")
End If

沒有留言:

張貼留言