成都網(wǎng)站建設(shè)四川推來客網(wǎng)絡(luò)網(wǎng)絡(luò)營銷試卷
文章目錄
- 需求來源
- Windows查詢Windows版本號方法
- 1. 如何查看Windows版本號
- 2. Windows開發(fā)如何通過代碼查詢Windows版本號
- (1) 使用C#代碼:
- (2) 使用VB.NET代碼
- 3.通過注冊表查看Windows版本信息
- Flutter查詢Windows版本號方法
- 依賴庫
- 支持平臺
- 實(shí)現(xiàn)步驟
- 1. 在pubspec.yaml中添加依賴
- 2. 獲取版本號
- 方法解釋
- openPath
- getValue
- getValueAsString
- getValueAsInt
- createValue
- deleteValue
- deleteKey
- renameSubkey
- 注意事項(xiàng)
- 拓展話題
需求來源
毛玻璃效果配置選項(xiàng):
WindowEffect.acrylic:Windows 10 1803 及以上版本
WindowEffect.aero:Windows 10 1803以下版本
書接上回,毛玻璃效果配置選項(xiàng)依據(jù)Windows的版本號而有所不同,那么如何獲取Windows的版本號了?
Windows查詢Windows版本號方法
1. 如何查看Windows版本號
要獲取Windows版本號,可以按照以下步驟進(jìn)行操作:
(1)打開"運(yùn)行"對話框,可以使用快捷鍵Win + R。
(2)在運(yùn)行對話框中輸入"winver",然后點(diǎn)擊"確定"按鈕。
(3)彈出的窗口中會顯示W(wǎng)indows的版本號和版本信息。
2. Windows開發(fā)如何通過代碼查詢Windows版本號
(1) 使用C#代碼:
using System;
using Microsoft.Win32;
class Program{static void Main(string[] args){string version = string.Empty;using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion")){if (key != null){version = key.GetValue("CurrentVersion").ToString();}}Console.WriteLine("Windows版本號:" + version);}}
(2) 使用VB.NET代碼
Imports Microsoft.Win32
Module Module1Sub Main()Dim version As String = String.EmptyUsing key As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion")If key IsNot Nothing Thenversion = key.GetValue("CurrentVersion").ToString()End IfEnd UsingConsole.WriteLine("Windows版本號:" & version)End SubEnd Module
通過C#和 .NET獲取Windows版本的方法,可以總結(jié)出2個(gè)關(guān)鍵點(diǎn):
1. 引入Win32依賴庫;
2. 讀取注冊表信息
3.通過注冊表查看Windows版本信息
打開注冊表編輯器,輸入"計(jì)算機(jī)\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion",就可以查看版本號信息
Flutter查詢Windows版本號方法
Windows原生開發(fā)獲取版本號的方法為Flutter提供了指導(dǎo),只要可以找到讀寫windows注冊表,就可以實(shí)現(xiàn)版本號的查詢。目前,flutter 已經(jīng)提供了讀寫windows注冊表的依賴庫,很方便我們實(shí)現(xiàn)相關(guān)功能.
依賴庫
win32_registry
支持平臺
Windows
實(shí)現(xiàn)步驟
1. 在pubspec.yaml中添加依賴
dependencies:...win32_registry: ^1.1.2
2. 獲取版本號
import 'package:win32_registry/win32_registry.dart';int? getWindowBuildNumber() {const regCurrentVersionKey = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion';final key =Registry.openPath(RegistryHive.localMachine, path: regCurrentVersionKey);final mCurrentVersion = key.getValueAsString('CurrentVersion');if (kDebugMode) {print("mCurrentVersion:$mCurrentVersion");}final mUBR = key.getValueAsInt('UBR');if (kDebugMode) {print("mUBR:$mUBR");}return mUBR;
}
打印值:
flutter: mCurrentVersion:6.3
flutter: mUBR:1081
方法解釋
openPath
打開指定的注冊表鍵
RegistryKey openPath(RegistryHive hive, {String path = '',AccessRights desiredAccessRights = AccessRights.readOnly,
})
RegistryHive :注冊表的入口,
枚舉值有l(wèi)ocalMachine(HKEY_LOCAL_MACHINE),
currentUser(HKEY_CURRENT_USER),
allUsers(HKEY_USERS),
classesRoot(HKEY_CLASSES_ROOT),
currentConfig(HKEY_CURRENT_CONFIG),
performanceData(HKEY_PERFORMANCE_DATA);
除了performanceData以外,其他的值與注冊表一級目錄一一對應(yīng);
path:注冊表的路徑
desiredAccessRights :期望權(quán)限
readOnly(KEY_READ),
writeOnly(KEY_WRITE),
allAccess(KEY_ALL_ACCESS);
createKey:創(chuàng)建一個(gè)新的注冊表鍵
下面是通過注冊表添加程序自動啟的案例
Future<void> updateRegistryTest() {const regCurrentVersionKey = r'Software\Microsoft\Windows\CurrentVersion\Run';final key =Registry.openPath(RegistryHive.currentUser, path: regCurrentVersionKey,desiredAccessRights: AccessRights.writeOnly);key.createKey("WeChat");key.createValue(const RegistryValue("WeChat", RegistryValueType.string, "D:\\Program Files (x86)\\Tencent\\WeChat\\WeChat.exe"));key.close();
}
創(chuàng)建結(jié)果如下:
getValue
查詢指定鍵的值
getValueAsString
查詢字符串類型的指定鍵的值
getValueAsInt
查詢Int類型的指定鍵的值
createValue
設(shè)置指定鍵的值
deleteValue
刪除指定鍵的值
deleteKey
刪除指定的注冊表鍵
renameSubkey
更改指定注冊表項(xiàng)的名稱
注意事項(xiàng)
- Unhandled Exception: Error 0x80070005: 拒絕訪問
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Error 0x80070005: 拒絕訪問。
#0 Registry.openPath (package:win32_registry/src/registry.dart:56:7)
#1 getWindowBuildNumber (package:window_example/util/window_util.dart:61:16)
#2 showAcrylic (package:window_example/util/window_util.dart:35:22)
#3 _MyHomePageState._init (package:window_example/main.dart:142:5)
<asynchronous suspension>
出現(xiàn)該異常:需要檢查路徑是否正確,權(quán)限參數(shù)是否正確;
拓展話題
Windows注冊表介紹與操作