C语言编程:操作注册表入门指南

4星 · 超过85%的资源 需积分: 33 34 下载量 90 浏览量 更新于2024-09-13 收藏 14KB TXT 举报
本文将介绍如何使用C语言进行注册表编程,这对于理解操作系统以及C语言的应用具有一定的帮助。我们将探讨如何通过Windows API函数RegOpenKeyEx(), RegSetValueEx()来操作注册表,以实现程序开机启动。 在Windows操作系统中,注册表是一个存储系统设置和应用程序配置的关键组件。通过修改注册表,我们可以控制程序的行为,例如使其在启动时自动运行。在C语言中,我们通常借助Windows API来与注册表交互。 以下是一个简单的示例,展示了如何将一个可执行文件("D:\123.exe")添加到“HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run”路径下,使得该程序能够在每次系统启动时自动运行: ```c #include <windows.h> static char subkey[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; static char vname[] = "Run123"; static char exefile[] = "D:\\123.exe"; ULONG dType = REG_SZ, len = 0; HKEY hKey; RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkey, 0, KEY_SET_VALUE | KEY_QUERY_VALUE, &hKey); // 打开或创建注册表项 if (RegQueryValueEx(hKey, vname, 0, &dType, NULL, &len) != ERROR_SUCCESS) { // 如果未找到"Run123" RegSetValueEx(hKey, vname, 0, REG_SZ, exefile, strlen(exefile) + 1); // 设置值 } RegCloseKey(hKey); // 关闭注册表项 ``` 这段代码首先打开`HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run`下的子键,然后检查是否已经存在名为"Run123"的值。如果不存在,它会将"D:\123.exe"作为字符串类型(REG_SZ)的值写入注册表,从而实现开机启动。 此外,还可以扩展这个示例,比如动态获取当前进程的可执行文件路径,以便将自身添加到启动项: ```c #include <windows.h> #include <stdio.h> int main(void) { TCHAR szPath[MAX_PATH]; GetModuleFileName(NULL, szPath, MAX_PATH); // 获取当前程序的完整路径 // 然后可以使用szPath替换exefile,将其写入注册表 // ... } ``` 这段代码利用`GetModuleFileName()`函数获取当前进程的可执行文件路径,这样可以确保将运行的程序添加到启动项,而无需手动输入路径。 请注意,直接修改注册表可能会对系统的稳定性产生影响,因此在实际应用中需谨慎处理。此外,如果你打算在你的应用程序中使用这些技术,最好先了解相关法律法规,并明确告知用户你的程序将如何使用注册表。
2012-05-20 上传
去年年末才看过一本关于ASP.NET 操作注册表的书,可惜那时候就压根没想过写到网上去。 现在想想 写到网上有诸多好处 比如、 1、可以快速回忆相关知识点,还有自己写的参考代码,比别人写的强多了 2、可以丰富自己的博客推广自己 3、加强自己写作能力 贴出代码了 -------------------- 1、引入命名空间 using Microsoft.Win32;//修改注册表所需要用到的命名空间 2、之后方法喽 //修改注册表 设置IE打印背景图片 适用于IE8一下版本,修改为工具选项下的 打印背景颜色与图像 public void IESetupPrint_Background() { RegistryKey key = Registry.CurrentUser; RegistryKey software = key.OpenSubKey("Software\\Microsoft\\Internet Explorer\\Main", true); //该项必须已存在 software.SetValue("Print_Background", "yes"); software.Close(); } //设置页眉 页脚为空 public void IESetupPageSetup() { RegistryKey key = Registry.CurrentUser; RegistryKey software = key.OpenSubKey("Software\\Microsoft\\Internet Explorer\\PageSetup", true); //该项必须已存在 software.SetValue("header", ""); software.SetValue("footer", ""); software.Close(); } //设置页边距 设置IE页面设置 打印背景图片 //上下边距具体的值可以 先在IE里面设置再查看注册表实际值 然后在程序里写死 public void IESetupPage() { RegistryKey key = Registry.CurrentUser;//IE8以上版本 修改为页面设置 里页面 打印背景颜色与图像 RegistryKey software = key.OpenSubKey("Software\\Microsoft\\Internet Explorer\\PageSetup", true); software.SetValue("margin_top", 0.55984); software.SetValue("margin_bottom", 0.55984); software.SetValue("margin_left", 0.75433); software.SetValue("margin_right", 0.40000); software.SetValue("Print_Background", "yes"); } //查看注册表相应的键值 运行输入 regedit