從注冊表讀取程序的版本
2024-07-21 02:21:08
供稿:網友
 
從注冊表讀取程序的版本
     
             屠恩海(sunhai) 
   開發工具:microsoft visual studio .net 2003
   操作系統:windows xp
                  registry 類簡介
  用visual studio .net讀寫注冊表一般用到registry類.
  registry類提供在運行 windows 的計算機上的注冊表中找到的標準根項集。
  注冊表是一個存儲設備,包含有關應用程序、用戶和默認系統設置的信息。例如,應用程序可以使用注冊表來存儲在應用程序關閉后需要保留的信息,并在應用程序重新加載時訪問那些同樣的信息。例如,可以存儲顏色首選項、屏幕位置或窗口大小。通過將信息存儲在注冊表中的不同位置,可以針對每個用戶來控制這些信息。 
  由 registry 公開的基(根) registrykey 實例描繪注冊表中的子項和值的基本存儲機制。所有項都是只讀的,因為注冊表依賴于它們的存在。由 registry 公開的項有: currentuser 存儲有關用戶首選項的信息。 localmachine 存儲本地計算機的配置信息。 classesroot 存儲有關類型(和類)及其屬性的信息。 users 存儲有關默認用戶配置的信息。 performancedata 存儲軟件組件的性能信息。 currentconfig 存儲非用戶特定的硬件信息。 dyndata 存儲動態數據。 
  一旦標識了希望在其下存儲/檢索注冊表中信息的根項后,可以使用 registrykey 類添加或移除子項和操作給定項的值。 
  硬件設備可以使用即插即用接口將信息自動放在注冊表中。安裝設備驅動程序的軟件可以通過向標準 api 寫入將信息放在注冊表中。 
    
                 registrykey 類
    registrykey 類表示 windows 注冊表中的項級節點。此類是注冊表封裝。 
  注冊表充當計算機上操作系統和應用程序的中央信息儲存庫。注冊表根據存儲在其中的元素的邏輯順序,以分層形式組織(有關該層次結構中的基級項,請參見 registry )。在注冊表中存儲信息時,請根據存儲的信息類型選擇適當的位置。一定要避免損壞由其他應用程序創建的信息,原因是這樣會導致那些應用程序出現意外的行為,并且還會對您自己的應用程序帶來不利影響。 
  registrykeys 是注冊表中的基本組織單位,好比是 windows 資源管理器中的文件夾。特定的項可以有子項(與文件夾可以有子文件夾一樣),并且只要用戶具有適當的刪除權限,且此項不是基項或基項的下一級項,就可以刪除此項。每個項還可以有多個關聯的值(值好比是文件),用于存儲您感興趣的應用程序的信息。每個值保存一條特定的信息,在需要時可以檢索或更新此信息。例如,可以為您的公司創建一個 registrykey(在項 hkey_local_machine/software 下),然后為您的公司創建的每個應用程序創建一個子項。每個子項保存特定于該應用程序的信息,如顏色設置、屏幕位置和大小或者可識別的文件擴展名。 
  注意,存儲在注冊表中的信息可由其他應用程序和用戶使用,因此不要用注冊表存儲安全信息或關鍵的應用程序信息。 
  若要獲取 registrykey 的實例,請使用靜態成員 opensubkey ,或者使用 registry 類的靜態成員。 
  本文主要用到:
  registrykey.opensubkey 方法:用指定的寫訪問權限檢索指定的子項。 
  以只讀方式檢索子項。 
  [visual basic] overloads public function opensubkey(string) as registrykey 
  registrykey.getsubkeynames 方法: 檢索包含所有子項名稱的字符串數組。
  public function getsubkeynames() as string () 
                 
                  從注冊表讀取excel的版本
  先引入命名空間:
  imports system
  imports microsoft.win32 
 
  要對注冊表有所了解,知道我們要讀取的位置在hkey_local_machine/software/microsoft/office。
  dim rk as registrykey = _
  registry.localmachine.opensubkey("software/microsoft/office", true)
  ' get the data from a specified item in the key.
  dim s as string() = rk.getsubkeynames() 
  dim blnexcel as boolean = false '本機是否安裝excel
  dim excelver as string      'excel的版本號 
  for num as integer = 0 to s.length - 1
    select case s.getvalue(num)
      case "11.0", "9.0", "8.0", "5.0", "4.0", "3.0" 'excel各個版本號
        dim rk1 as registrykey = _
        registry.localmachine.opensubkey("software/microsoft/office/" & s.getvalue(num) & "/excel", true)
        if not (rk1 is nothing) then 
          blnexcel = true
          excelver = s.getvalue(num) 
          exit select
          exit for
         end if
      end select
next
 
  用registrykey類讀寫注冊表是否十分簡便呢?