TAHA
03-11-2010, 08:44 PM
.wysiwyg { BACKGROUND: #f5f5ff; FONT: 10pt tahoma,tahoma,tahoma; COLOR: #000000 } P { MARGIN: 0px } .inlineimg { VERTICAL-ALIGN: middle } در این مقاله روش بدست آوردن اطلاعات محیطی از سیستم مانند نام کاربر، نام کامپیوتر، اندازه آیکونها، تعداد مانیتور، اندازه قاب پنجره، درایوهای موجود و آدرس پوشههای مخصوص سیستم در زبان Visual Basic .NET بررسی میشود.
اینگونه اطلاعات را میتوان از فضانام System.Windows.Forms.SystemInformation بدست آورد. برای مثال چند نمونه از اینگونه اطلاعات را با کد زیر در کنترل ListView وارد می کنیم. نام این کنترل lvwSystemInformation است. توجه داشته باشید که خصوصیت View این کنترل در حالت Details قرار گرفته باشد.
With lvwSystemInformation.Items.Add("BorderSize") .SubItems.Add(SystemInformation.BorderSize.ToStrin g()) End With With lvwSystemInformation.Items.Add("ComputerName") .SubItems.Add(SystemInformation.ComputerName.ToStr ing()) End With With lvwSystemInformation.Items.Add("CursorSize") .SubItems.Add(SystemInformation.CursorSize.ToStrin g()) End With With lvwSystemInformation.Items.Add("DoubleClickTime") .SubItems.Add(SystemInformation.DoubleClickTime.To String()) End With With lvwSystemInformation.Items.Add("IconSize") .SubItems.Add(SystemInformation.IconSize.ToString( )) End With With lvwSystemInformation.Items.Add("MonitorCount") .SubItems.Add(SystemInformation.MonitorCount.ToStr ing()) End With
بدست آوردن نام درایوها
متد Environment.GetLogicalDrives آرایهای از نام درایوها برمیگرداند. میتوان این آرایه را به عنوان Data Source یک لیست برای نمایش درایوها بکار برد. پس از بدست آوردن لیستی از درایوها، شما ممکن است بخواهید که اطلاعاتی نیز در مورد فایلها و دایرکتوریهای موجود در این درایوها بدست آورید. جهت این کار بهتر است که به کلاسهای System.IO.File و System.IO.Directory مراجعه کنید.
پوشههای مخصوص سیستم
در ویندوز پوشههایی با نام پوشههای مخصوص یا Special Folders وجود دارد. پوشههای System ،Startup ،My Documents و Program Files از این نمونهاند. در بسیاری از مواقع لازم است که برنامه نویس آدرس این پوشهها را بداند تا برای مثال بتواند فایلی را در آنها کپی کند. اما از آنجایی که در هر سیستم آدرس این پوشهها متفاوت است، VB.NET متدهایی را جهت بدست آوردن این آدرسها ارائه میدهد.
مهمترین پوشه هر ویندوز، شاخه System میباشد. برای بدست آوردن آدرس این پوشه میتوان از کد زیر استفاده کرد:
lblSystemFolder.Text = GetFolderPath(SpecialFolder.System)
تابع GetFolderPath تابعی از کلاس System.Environment میباشد که آدرس اینگونه پوشهها را برمیگرداند. تعریف این تابع به صورت زیر است:
Public Shared Function GetFolderPath (ByVal folder As System.Environment.SpecialFolder) As String
تکنیک دیگری نیز وجود دارد که به کمک آن میتوان لیست کاملی از تمامی این پوشهها را بدست آورد. در این روش نه چندان آسان از تابع GetNames از کلاس System.Enum استفاده میشود. این تابع یک مجموعه شمارشی را بعنوان پارامتر ورودی میگیرد و آرایهای از اسامی ثابتهای این مجموعه شمارشی برمیگرداند. تعریف تابع را در زیر مشاهده میکنید:
Public Shared Function GetNames(ByVal enumType As System.Type) As String()
پس از نوشتن تابعی مانند زیر، در یک رویداد مانند رویداد Load فرم این تابع با پارامتر Environment.SpecialFolder صدا زده میشود.
Private Sub LoadList(ByVal lst As ListBox, ByVal typ As Type) lst.DataSource = System.Enum.GetNames(typ) End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load LoadList(lstFolders, GetType(Environment.SpecialFolder)) End Sub
حال میخواهیم کاری کنیم که پس از کلیک بر روی نام هر پوشه، آدرس آن نیز نمایش داده شود. به رویداد SelectedIndexChanged رفته و کدهای زیر را مینویسیم:
Private Sub lstFolders_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFolders.SelectedIndexChanged Dim sf As Environment.SpecialFolder = GetSpecialFolderFromList() lblSpecialFolder.Text = GetFolderPath(sf) End Sub
در این تابع ابتدا متغیری با نام sf از نوع Environment.SpecialFolder میسازیم که نگهدارنده مقدار خروجی تابع GetSpecialFolderFromList میباشد. این تابع با استفاده از گزینه انتخاب شده از لیست پوشههای مخصوص نام آنرا برمیگرداند و آن را بصورت زیر تعریف می کنیم:
Private Function GetSpecialFolderFromList() As Environment.SpecialFolder Return CType(System.Enum.Parse(GetType(Environment.Specia lFolder), _ lstFolders.SelectedItem.ToString), Environment.SpecialFolder) End Function
تابع Parse از کلاس System.Enum یک رشته یا مقدار عددی از یک مجموعه شمارشی را به یک شئ شمارشی تبدیل میکند. تعریف این تابع را در زیر میبینید:
Public Shared Function Parse(ByVal enumType As System.Type, ByVal value As String) As Object
سپس مقدار برگشتی آن با استفاده از CType به نوع Environment.SpecialFolder تبدیل میشود. بدین صورت پس از آنکه بر روی هر یک از آیتمهای لیست کلیک می کنیم، آدرس آن در Label مقابل نمایش داده میشود.
VN:F [1.8.3_1051]
اینگونه اطلاعات را میتوان از فضانام System.Windows.Forms.SystemInformation بدست آورد. برای مثال چند نمونه از اینگونه اطلاعات را با کد زیر در کنترل ListView وارد می کنیم. نام این کنترل lvwSystemInformation است. توجه داشته باشید که خصوصیت View این کنترل در حالت Details قرار گرفته باشد.
With lvwSystemInformation.Items.Add("BorderSize") .SubItems.Add(SystemInformation.BorderSize.ToStrin g()) End With With lvwSystemInformation.Items.Add("ComputerName") .SubItems.Add(SystemInformation.ComputerName.ToStr ing()) End With With lvwSystemInformation.Items.Add("CursorSize") .SubItems.Add(SystemInformation.CursorSize.ToStrin g()) End With With lvwSystemInformation.Items.Add("DoubleClickTime") .SubItems.Add(SystemInformation.DoubleClickTime.To String()) End With With lvwSystemInformation.Items.Add("IconSize") .SubItems.Add(SystemInformation.IconSize.ToString( )) End With With lvwSystemInformation.Items.Add("MonitorCount") .SubItems.Add(SystemInformation.MonitorCount.ToStr ing()) End With
بدست آوردن نام درایوها
متد Environment.GetLogicalDrives آرایهای از نام درایوها برمیگرداند. میتوان این آرایه را به عنوان Data Source یک لیست برای نمایش درایوها بکار برد. پس از بدست آوردن لیستی از درایوها، شما ممکن است بخواهید که اطلاعاتی نیز در مورد فایلها و دایرکتوریهای موجود در این درایوها بدست آورید. جهت این کار بهتر است که به کلاسهای System.IO.File و System.IO.Directory مراجعه کنید.
پوشههای مخصوص سیستم
در ویندوز پوشههایی با نام پوشههای مخصوص یا Special Folders وجود دارد. پوشههای System ،Startup ،My Documents و Program Files از این نمونهاند. در بسیاری از مواقع لازم است که برنامه نویس آدرس این پوشهها را بداند تا برای مثال بتواند فایلی را در آنها کپی کند. اما از آنجایی که در هر سیستم آدرس این پوشهها متفاوت است، VB.NET متدهایی را جهت بدست آوردن این آدرسها ارائه میدهد.
مهمترین پوشه هر ویندوز، شاخه System میباشد. برای بدست آوردن آدرس این پوشه میتوان از کد زیر استفاده کرد:
lblSystemFolder.Text = GetFolderPath(SpecialFolder.System)
تابع GetFolderPath تابعی از کلاس System.Environment میباشد که آدرس اینگونه پوشهها را برمیگرداند. تعریف این تابع به صورت زیر است:
Public Shared Function GetFolderPath (ByVal folder As System.Environment.SpecialFolder) As String
تکنیک دیگری نیز وجود دارد که به کمک آن میتوان لیست کاملی از تمامی این پوشهها را بدست آورد. در این روش نه چندان آسان از تابع GetNames از کلاس System.Enum استفاده میشود. این تابع یک مجموعه شمارشی را بعنوان پارامتر ورودی میگیرد و آرایهای از اسامی ثابتهای این مجموعه شمارشی برمیگرداند. تعریف تابع را در زیر مشاهده میکنید:
Public Shared Function GetNames(ByVal enumType As System.Type) As String()
پس از نوشتن تابعی مانند زیر، در یک رویداد مانند رویداد Load فرم این تابع با پارامتر Environment.SpecialFolder صدا زده میشود.
Private Sub LoadList(ByVal lst As ListBox, ByVal typ As Type) lst.DataSource = System.Enum.GetNames(typ) End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load LoadList(lstFolders, GetType(Environment.SpecialFolder)) End Sub
حال میخواهیم کاری کنیم که پس از کلیک بر روی نام هر پوشه، آدرس آن نیز نمایش داده شود. به رویداد SelectedIndexChanged رفته و کدهای زیر را مینویسیم:
Private Sub lstFolders_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstFolders.SelectedIndexChanged Dim sf As Environment.SpecialFolder = GetSpecialFolderFromList() lblSpecialFolder.Text = GetFolderPath(sf) End Sub
در این تابع ابتدا متغیری با نام sf از نوع Environment.SpecialFolder میسازیم که نگهدارنده مقدار خروجی تابع GetSpecialFolderFromList میباشد. این تابع با استفاده از گزینه انتخاب شده از لیست پوشههای مخصوص نام آنرا برمیگرداند و آن را بصورت زیر تعریف می کنیم:
Private Function GetSpecialFolderFromList() As Environment.SpecialFolder Return CType(System.Enum.Parse(GetType(Environment.Specia lFolder), _ lstFolders.SelectedItem.ToString), Environment.SpecialFolder) End Function
تابع Parse از کلاس System.Enum یک رشته یا مقدار عددی از یک مجموعه شمارشی را به یک شئ شمارشی تبدیل میکند. تعریف این تابع را در زیر میبینید:
Public Shared Function Parse(ByVal enumType As System.Type, ByVal value As String) As Object
سپس مقدار برگشتی آن با استفاده از CType به نوع Environment.SpecialFolder تبدیل میشود. بدین صورت پس از آنکه بر روی هر یک از آیتمهای لیست کلیک می کنیم، آدرس آن در Label مقابل نمایش داده میشود.
VN:F [1.8.3_1051]