鱼C论坛

 找回密码
 立即注册
查看: 1177|回复: 7

[已解决]如何操作注册表,写入程序?

[复制链接]
发表于 2023-7-26 17:33:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,我操作注册表内的的软件信息(安装的应用),路径是什么?
chatgpt 回答论坛问题应当制止
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-26 17:34:19 | 显示全部楼层
要在 Python 中操作注册表并写入程序,你可以使用  winreg  模块(Python 3.x)或者  _winreg  模块(Python 2.x)。这些模块提供了方法来读取、写入和修改 Windows 注册表中的键和值。

下面是一个示例,演示如何使用  winreg  模块来读取和写入注册表中的软件信息:
  1. import winreg
  2. # 定义注册表的根键路径
  3. SOFTWARE_KEY = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
  4. def read_installed_software():
  5.     # 打开 SOFTWARE_KEY
  6.     key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, SOFTWARE_KEY, 0, winreg.KEY_READ)
  7.     # 遍历所有子键,获取安装的软件信息
  8.     num_subkeys = winreg.QueryInfoKey(key)[0]
  9.     for i in range(num_subkeys):
  10.         subkey_name = winreg.EnumKey(key, i)
  11.         subkey = winreg.OpenKey(key, subkey_name)
  12.         software_name = winreg.QueryValueEx(subkey, "DisplayName")[0]
  13.         software_version = winreg.QueryValueEx(subkey, "DisplayVersion")[0]
  14.         print("软件名称:", software_name)
  15.         print("版本号:", software_version)
  16.         print("------------------")
  17.     # 关闭注册表键
  18.     winreg.CloseKey(key)
  19. def write_to_registry():
  20.     # 打开 SOFTWARE_KEY
  21.     key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, SOFTWARE_KEY, 0, winreg.KEY_ALL_ACCESS)
  22.     # 创建新的子键
  23.     new_key = winreg.CreateKey(key, "NewSoftware")
  24.    
  25.     # 设置子键的值
  26.     winreg.SetValueEx(new_key, "DisplayName", 0, winreg.REG_SZ, "New Software")
  27.     winreg.SetValueEx(new_key, "DisplayVersion", 0, winreg.REG_SZ, "1.0")
  28.     # 关闭注册表键
  29.     winreg.CloseKey(new_key)
  30.     winreg.CloseKey(key)
  31. # 读取已安装的软件信息
  32. read_installed_software()
  33. # 写入注册表示例
  34. write_to_registry()
复制代码

在上述示例中, read_installed_software  函数用于读取已安装的软件信息,它打开  SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall  路径下的注册表键,并遍历所有子键,获取软件名称和版本号。

write_to_registry  函数用于示例目的创建一个新的子键,并设置其值为 "New Software" 和 "1.0"。

请注意,操作注册表需要管理员权限,因此在运行脚本时,确保以管理员身份运行。

希望这对你有所帮助!如果你有其他问题,请随时提问。求给个最佳答案,非常感谢
只要点击我的回复贴写着发表时间的那一栏的绿色按钮即可!-->

                               
登录/注册后可看大图


此回答源于ChatGPT,若有不正确之处,请多包容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2023-7-26 17:34:26 | 显示全部楼层
在 Python 中,你可以使用 winreg(Windows Registry)模块来操作 Windows 注册表。该模块提供了一组函数和常量,用于读取、写入和删除注册表键和值。

为了操作注册表的软件信息,你需要知道软件信息存储的注册表路径。软件信息通常存储在以下两个注册表键中:

1. HKEY_CURRENT_USER:保存当前用户的配置信息。路径为 HKEY_CURRENT_USER\Software

2. HKEY_LOCAL_MACHINE:保存计算机的全局配置信息。路径为 HKEY_LOCAL_MACHINE\Software

下面是一个示例,演示如何使用 Python 操作注册表并读取软件信息:
  1. import winreg
  2. def get_installed_software():
  3.     installed_software = []
  4.    
  5.     # 打开 HKEY_CURRENT_USER\Software 键
  6.     current_user_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software")
  7.    
  8.     try:
  9.         # 逐个遍历子键
  10.         for i in range(winreg.QueryInfoKey(current_user_key)[0]):
  11.             subkey_name = winreg.EnumKey(current_user_key, i)
  12.             
  13.             # 如果子键名称以 "Microsoft" 开头,则将其视为已安装的软件
  14.             if subkey_name.startswith("Microsoft"):
  15.                 installed_software.append(subkey_name)
  16.    
  17.     finally:
  18.         # 关闭注册表键
  19.         winreg.CloseKey(current_user_key)
  20.    
  21.     return installed_software
  22. # 调用函数获取已安装的软件列表
  23. software_list = get_installed_software()
  24. # 打印已安装的软件信息
  25. for software in software_list:
  26.     print(software)
复制代码

上述示例代码只是读取了当前用户的注册表中的软件信息,你可以根据需要修改路径和条件来获取更具体的软件信息。请注意,在操作注册表时要小心,确保仅对你有权限的注册表键进行操作,并备份重要的注册表项以防止意外。

希望这能帮到你!如果你有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-26 17:34:58 | 显示全部楼层
标题:如何操作注册表,写入程序?

内容:

要操作注册表中的软件信息(已安装的应用),你需要知道的路径通常是  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 。在这个路径下,你可以找到所有已安装的应用程序的列表。每个应用程序都有一个唯一的子键,其中包含有关该应用程序的信息,如其安装路径,版本号等。

要写入注册表,你需要使用 Microsoft.Win32.Registry 命名空间。以下是一个简单的示例,它打开一个键并写入一个值:

  1. using Microsoft.Win32;

  2. public class Example
  3. {
  4.     public static void Main()
  5.     {
  6.         // 打开子键
  7.         RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", true);

  8.         // 检查键是否存在
  9.         if (key != null)
  10.         {
  11.             // 创建新的子键
  12.             RegistryKey newkey = key.CreateSubKey("YourKeyName");

  13.             // 检查新键是否创建成功
  14.             if (newkey != null)
  15.             {
  16.                 // 写入值
  17.                 newkey.SetValue("YourValueName", "YourValue");
  18.                 newkey.Close();
  19.             }

  20.             key.Close();
  21.         }
  22.     }
  23. }
复制代码


注意,你应该谨慎地操作注册表,因为错误的更改可能会导致系统不稳定或者无法启动。

此外,你的应用程序可能需要管理员权限才能修改 HKEY_LOCAL_MACHINE 中的键。如果你在没有管理员权限的情况下运行这段代码,可能会收到一个错误消息。因此,你可能需要在你的程序的清单文件中请求提升权限。

另一个要注意的是,不同的Windows版本可能有不同的注册表结构和键名。你应该在你的目标系统上进行测试,以确保你的代码能够正常工作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-26 17:45:10 | 显示全部楼层    本楼为最佳答案   
操作注册表用.reg就行了
https://www.cnblogs.com/fczjuever/archive/2013/04/09/3010711.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-26 17:46:52 | 显示全部楼层
liuhongrun2022 发表于 2023-7-26 17:45
操作注册表用.reg就行了
https://www.cnblogs.com/fczjuever/archive/2013/04/09/3010711.html

我还在苦苦寻找 WinReg 教程……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2023-7-26 17:50:25 | 显示全部楼层
liuhongrun2022 发表于 2023-7-26 17:45
操作注册表用.reg就行了
https://www.cnblogs.com/fczjuever/archive/2013/04/09/3010711.html

那么如何移除注册表项
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-26 18:09:28 | 显示全部楼层

[xxx/xxx/xxx]
前面加个减号
-[xxx/xxx/xxx]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 20:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表