• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VB應用程序對系統配置參數的確定

    發表于:2007-05-25來源:作者:點擊數: 標簽:系統確定配置參數應用程序
    VB5應用程序對系統配置參數的確定 對于 程序員 而言,了解系統配置的情況對應用程序的 開發 具有重要的意義。在開發諸如多媒體應用、圖形軟件等與系統配置密切相關的軟件時,由于用戶機器配置不盡相同,所以,由軟件在執行時動態獲取這些配置參數以確定執行
    VB5應用程序對系統配置參數的確定
    對于程序員而言,了解系統配置的情況對應用程序的開發具有重要的意義。在開發諸如多媒體應用、圖形軟件等與系統配置密切相關的軟件時,由于用戶機器配置不盡相同,所以,由軟件在執行時動態獲取這些配置參數以確定執行流程,則是軟件能否順利運行的至關重要的因素。這里指的系統配置是Windows 95操作系統的系統配置。程序員對系統物理配置的信息經常需要了解的是中央處理器類型、物理內存、虛擬內存、外部存儲器、Windows路徑、顯示器和打印機信息等。

      Visual Basic是一套優秀的軟件開發工具,現已成為覆蓋微軟大部分桌面產品的程序設計語言。Visual Basic 5.0的專業版和企業版引入了本機代碼、ActiveX文檔、多線程環境、分布式COM和遠程自動化工具等功能,將Visual Basic應用程序推到了一個更高的境界。但是VB5并沒有直接給出獲取系統配置參數的語句或函數,而是需要程序員利用Windows的應用程序接口(API)來獲取這些參數。Windows API是為C或C++程序員而設計的,對于一般VB程序員而言,要深入應用Windows API是很困難的,本文將給出通過調用Win32 API來確定系統配置的基本方法。

      

      一.Win32 API基本概念和調用

      Windows的32位應用程序接口(Win32 API)包含1000多個復雜的函數和幾百種Windows常量、消息和結構,使得程序員可以用不同類型的程序設計語言開發出運行在Windows 95和Windows NT操作系統上的應用程序。C和C++語言可以訪問全部Windows的消息和用法,而VB就無法能全部訪問到,但是通過使用Win32 API可以擴展VB來超越基本的屬性、方法和事件,使得程序對系統擁有更大的控制權和靈活性。

      Win32 API包括以下四種常用的函數類型。

      1.Windows Management(User)

      提供基本的窗口構造塊和建立管理程序輸入顯示、檢索用戶輸入的函數,通過Win32 API的Windows Management層為應用程序創建和管理用戶界面。Windows Management支持動態數據交換DDE(Dynamic Data Exchange)一類的系統功能和剪貼板函數。

      2.Graphics Device Interface(GDI)

      提供支持系統中已有的物理設備和邏輯設備的功能,如監視器、打印機、內存設備描述表等。通過GDI可以定義不同的繪圖對象,提供了畫線、圓和其他形狀的功能,對位圖操作提供有力的支持。

      3.System Server(Kernel)

      提供了訪問系統資源和工具的途徑,包括內存、文件系統、運行處理等等。VB透過訪問和使用動態鏈接庫(DLL:Dynamic Link Libraries),如API或自定義DLL,從這里可以獲取操作系統控制下的設備參數和改變其工作狀態。

      4.Multimedia

      提供了對音頻(WAV)、MIDI音樂、AVI視頻、游戲操縱桿和高精度定時器的支持。在VB5中對Win32 API的調用是很方便的。Microsoft專門整理了Win32 API函數中所用到的函數、類型結構聲明和全局常量的值,形成的文件WIN32API.TXT在VB專業版或企業版中放在所在路徑下的WINAPI子目錄中。在VB5中可以通過兩種途徑引用這些整理好的參數:(1)直接啟動VB5文件夾中的API文本查看器;(2)通過VB5編輯環境中的“外接程序管理器”調入API文本查看器。Microsoft有時對WIN32API.TXT作出修訂,公布在其網點上,供用戶下載使用。

      

      二.Windows系統路徑的獲取

       應用程序在對操作系統的基本參數進行配置和調用時,必須獲取Windows的安裝路徑,其中包括system的路徑。Win32 API給出了獲取Windows和system路徑的函數調用。

      1.獲取Windows的路徑

      Declare Function GetWindowsDirectory Lib "kernel32" Alias _

       "GetWindowsDirectoryA" (ByVal lpBuffer As String, _

       ByVal nSize As Long) As Long

      GetWindowsDirectory()屬于System Server的函數成員,用于獲取Windows目錄的路徑名稱;GetWindowsDirectoryA是其函數的別名(Alias)。在多數情況下,當一個API函數被聲明時,會使用一個別名來替代真正的函數名,別名提供了用另一個名稱調用API函數的方法。如果API函數名與VB中的保留字相沖突,就必須使用別名,如GetObject。

      2.獲取system的路徑

      Declare Function GetSystemDirectory Lib "kernel32" Alias _

       "GetSystemDirectoryA" (ByVal lpBuffer As String, _

       ByVal nSize As Long) As Long

      GetSystemDirectory()屬于System Server的函數成員,用于獲取windows\system目錄的路徑名稱。

      首先在VB5中新建一個項目,再添加一個模塊,在Module1的“聲明”部分加入以下代碼。

      Declare Function GetWindowsDirectory Lib "kernel32" Alias _

       "GetWindowsDirectoryA" (ByVal lpBuffer As String, _

       ByVal nSize As Long) As Long

      Declare Function GetSystemDirectory Lib "kernel32" Alias _

       "GetSystemDirectoryA" (ByVal lpBuffer As String, _

       ByVal nSize As Long) As Long

      '定義Windows和Windows\system所在路徑的全局變量

      Public WindowsDir As String, WindowsSysDir As String

      為了防止在API函數調用返回的字符串中出現空格,有必要對其進行處理,去掉所有空格。VB5沒有提供消除字符間空格的函數,所以我們在Module1中編制自定義函數來完成這個功能。

      'AllTrim() 刪除字符串中的空白字符函數

      Function AllTrim$(Incoming$)

       Temp$ = Incoming$

       n% = InStr(Temp$, Chr$(0))

       If n% Then Temp$ = Left$(Temp$, n% - 1)

       Temp$ = LTrim$(RTrim$(Temp$))

       AllTrim$ = Temp$

      End Function

      在Module1中設立獲取windows和system路徑的過程:

      ' WinSysDir --- 獲取Windows和Windows\system路徑的過程

      Sub WinSysDir()

       WindowsDir = Space(144)

       WindowsSysDir = Space(144)

      If GetWindowsDirectory(WindowsDir,144) = 0 Or _

       GetSystemDirectory(WindowsSysDir, 144) = 0 Then

       MsgBox "無法定位 Windows 的路徑 !", 16, "出現錯誤"

       Else

       WindowsDir = AllTrim$(WindowsDir)

       WindowsSysDir = AllTrim$(WindowsSysDir)

       End If

      End Sub

      在Form1的Form_Load()事件中調用WinSysDir()就可以獲得windows和system路徑的名稱,演示代碼如下:

      WinSysDir

      Debug.Print WindowsDir

      Debug.Print WindowsSysDir

      在VB5環境下運行,就會在調試所用的“立即”窗口中給出這兩個路徑。

      

      三.驅動器參數的確定

      Win32 API中的GetDriveType()函數用來識別驅動器類型。該函數只有一個字符型參數,用以指定希望識別的驅動器號。GetDriveType()函數返回值是一個長整型數值,不同的數值表示不同的驅動器類型,具體對應關系如下:

       2---軟盤驅動器

       3---硬盤驅動器

       4---網絡驅動器

       5---光盤驅動器

       6---內存驅動器

      Win32 API的GetDiskFreeSpace()函數可以獲得系統中驅動器的容量參數。

      建立一個新項目,在Form1的“通用”部分中聲明API函數:

      Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" _

       (ByVal nDrive As String) As Long

      Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias _

       "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, _

       lpSectorsPerCluster As Long, lpBytesPerSector As Long, _

       lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) _

       As Long

      Private Const DRIVE_REMOVABLE = 2 ' 可移動驅動器

      Private Const DRIVE_FIXED = 3 ' 固定驅動器

      Private Const DRIVE_REMOTE = 4 ' 網絡驅動器

      Private Const DRIVE_CDROM = 5 ' 光盤驅動器

      Private Const DRIVE_RAMDISK = 6 ' 內存模擬驅動器

      在窗體Form1中添加三個Label控件和一個ComboBox控件。在Form_Load()和Combo1_Click()事件中分別編寫如下代碼。

      Private Sub Form_Load()

       Dim Num As Long

       Dim buff As String

       Label1.Caption = ""

       Label2.Caption = ""

       Label3.Caption = ""

       For i = 0 To 25

       buff = Chr$(65 + i) + ":\"

       Num = GetDriveType(buff)

       If Num > 1 Then

       Combo1.AddItem Chr$(65 + i)

       End If

       Next i

       Combo1.Text = "C"

      End Sub

      

      Private Sub Combo1_Click()

       Dim DriveType As Long

       Dim DriveSize As Long

       Dim TotalC As Long

       Dim NumC As Long

       Dim SectorsC As Long

       Dim BytesS As Long

       Dim buff As String

      

       buff = Combo1.Text + ":\"

       DriveType& = GetDriveType(buff)

       Select Case DriveType&

       Case DRIVE_REMOVABLE

       Label1.Caption = "這是可移動驅動器"

       Case DRIVE_FIXED

       Label1.Caption = "這是固定驅動器"

       Case DRIVE_REMOTE

       Label1.Caption = "這是網絡驅動器"

       Case DRIVE_CDROM

       Label1.Caption = "這是CD - ROM驅動器"

       Case DRIVE_RAMDISK

       Label1.Caption = "這是內存模擬驅動器"

       Case Else

       Label1.Caption = "這是無效的該驅動器"

       End Select

       DriveSize = GetDiskFreeSpace(buff, SectorsC, BytesS, TotalC, NumC)

       If DriveSize Then

       TotalC = TotalC * SectorsC * BytesS

       NumC = NumC * SectorsC * BytesS

       Label2.Caption = "該驅動器全部空間 " + _

       Str(Val(Format$(NumC, "##########0")) / 1024) + " KBytes"

       Label3.Caption = "該驅動器剩余空間 " + _

       Str(Val(Format$(TotalC, "##########0")) / 1024) + " KBytes"

       Else

       Label2.Caption = ""

       Label3.Caption = ""

       End If

      End Sub

      運行這段程序,通過下拉框來選擇系統中存在的驅動器,從而獲得其相關參數。

      

      四.獲取中央處理器的類型

      Win32 API的GetSystemInfo()函數提供了對CPU類型的判別。首先在窗體Form1的“通用”部分中聲明對這一函數的調用:

      Private Declare Sub GetSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM-INFO)

      由于SYSTEM-INFO是一個類型,所以還要對其進行定義:

      Private Type SYSTEM_INFO

       dwOemID As Long

       dwPageSize As Long

       lpMinimumApplicationAddress As Long

       lpMaximumApplicationAddress As Long

       dwActiveProcessorMask As Long

       dwNumberOrfProcessors As Long

       dwProcessorType As Long

       dwAllocationGranularity As Long

       dwReserved As Long

      End Type

      Dim SysInfo As SYSTEM—INFO

      在窗體中添加一個Label控件。將如下代碼加到Form_Load()事件中:

      Call GetSystemInfo(SysInfo)

      Select Case SysInfo.dwProcessorType

       Case 386

       Label1.Caption = "該機器中央處理器類型為: 386"

       Case 486

       Label1.Caption = "該機器中央處理器類型為: 486"

       Case 586

       Label1.Caption = "該機器中央處理器類型為: 奔騰"

       Case Else

       Label1.Caption = "無法判斷該機器的中央處理器類型"

      End Select

      

      五.獲取內存信息

      利用Win32 API的GlobalMemoryStatus()可以方便地獲取系統中物理內存總量、虛擬內存總量、已用的虛擬內存數量和剩余的虛擬內存數量。

      在窗體Form1的“通用”部分中聲明對GlobalMemoryStatus()函數的調用:

      Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)

      定義MEMORYSTATUS類型:

      Private Type MEMORYSTATUS

       dwLength As Long

       dwMemoryLoad As Long

       dwTotalPhys As Long

       dwAvailPhys As Long

       dwTotalPageFile As Long

       dwAvailPageFile As Long

       dwTotalVirtual As Long

       dwAvailVirtual As Long

      End Type

      Dim MemInfo As MEMORYSTATUS

      在窗體Form1中添加三個Label控件,分別為Label1、Label2和Label3,在Form_Load()事件中編寫下列代碼:

      Call GlobalMemoryStatus(MemInfo)

      Label1.Caption = "物理內存總量:" + Str$(MemInfo.dwTotalPhys) + " Bytes"

      Label2.Caption = "虛擬內存總量:" + Str$(MemInfo.dwTotalVirtual) + " Bytes"

      Label3.Caption = "已用虛擬內存:" + Str$(MemInfo.dwAvailPhys) + " Bytes"

      Label4.Caption = "剩余虛擬內存:" + Str$(MemInfo.dwAvailVirtual) + " Bytes"

      

      六.獲取當前顯示器的分辨率

      Win32 API中的GetSystemMetrics()函數提供了這方面的度量參數。在窗體的“通用”部分中聲明調用:

      Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

      Const SM_CXSCREEN = 0

      Const SM_CYSCREEN = 1

      在窗體中添加一個Label控件,在Form_Load()事件中調用GetSystemMetrics()函數來判斷當前顯示器的分辨率。

      Dim x As String

      Dim y As String

      n = Str(GetSystemMetrics(SM_CXSCREEN))

      y = Str(GetSystemMetrics(SM_CYSCREEN))

      Label1.Caption = "當前顯示器分辨率: " + n + "x" + y

      

      七.調用MSINFO32.EXE程序

      在MS Office套件中,Microsoft提供了MSINFO32.EXE實用程序,它較為全面地為用戶提供了系統、打印、DLL、字體、校對、圖形過濾器、文本轉換器、顯示、音頻、視頻、CD-ROM、OLE注冊表、活動模塊、輸入法等信息。該程序一般放置在Windows所在驅動器的\ Program Files\ Microsoft Shared\ MSInfo路徑下。在VB應用程序中,一般在“關于”窗口中對這個實用程序加以調用,雖然其中的信息無法直接應用,但它增加了程序的專業性。

      要想成功地調用MSINFO32.EXE,關鍵在于獲取它所在的路徑。這一路徑無法直接由Win32 API函數獲得,也不存在于Windows的配置文件中,而僅存在于Windows 的注冊表中。Office套件在安裝時對MSINFO32.EXE進行了注冊,可供Office各部件共同調用,其路徑信息保存在注冊表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\MSINFO中,因此,獲取路徑的問題轉化成了對注冊表的查詢。

      Win32 API提供了一系列操縱注冊表的函數,這里用到了RegOpenKeyEx()、RegQueryValueEx()和RegCloseKey()函數,分別用于打開注冊表關鍵字、檢索注冊表關鍵字的值和關閉注冊表關鍵字。如果RegOpenKeyEx()和RegQueryValueEx()返回為0,說明成功地打開了注冊表關鍵字,并且檢索到了預定的MSIFO32.EXE關鍵字值,最后調用Shell()函數來啟動MSINFO32.EXE。

      VB5的窗體向導提供了標準的調用過程。首先建立一個新項目,然后在“項目”菜單中選擇“刪除Form1”,再添加一個窗體,在彈出的對話框中選擇“關于對話框”,這樣就產生了一個定制好的標準的“關于”窗體,其中就有對MSINFO32.EXE的調用,并對運行錯誤設置了相應的處理。Microsoft對代碼做了詳盡的注釋,這里就不再贅述了。

      Visual Basic的企業版提供了Microsoft Developer Network(MSDN)啟動工具箱,安裝之后,就可以訪問Win32 Software Development Kit(SDK),它為Win32 API提供了文件說明,可以幫助程序員理解每一個函數、結構和常量的工作原理。對VB程序員來講,理解和使用Windows API有一定的難度,它要求程序員對Windows的工作原理有較為深入的了解,如果掌握好Windows API的使用方法,則能夠極大地擴展Visual Basic語言的功能,使應用程序對系統的控制更加深入、靈活。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>