高端网站设计报价表哪里有培训网
1.注册表
Windows注册表是Windows操作系统中的一个关键组件,用于存储系统和应用程序的配置信息。注册表是一个层次结构的数据库,它由多个键(key)和值(value)组成。
Windows系统注册表是一个核心数据库,用于存储各种参数,直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行。注册表包含软件、硬件和用户首选项的设置,这些设置在Windows操作系统的启动和运行过程中起着核心作用。
2.如何打开注册表
-
在任务栏上的搜索框中,键入regedit,然后选择"注册表编辑器 (桌面应用) 结果。
-
右键单击"开始", 然后选择"运行"。 在"打开:"框中键入 regedit,然后选择"确定"。(Win+R)
3. 增加、删除、修改、查询注册表项
3.1 系统函数SystemParametersInfo 修改、查询
应用SystemParametersInfo函数可以获取和设置数量众多的windows系统参数。
我们先来看看SystemParametersInfo函数的定义和参数:
SystemParametersInfoW(
In UINT uiAction,
In UINT uiParam,
Pre_maybenull Post_valid PVOID pvParam,
In UINT fWinIni);
参数:
uAction Long,指定要设置的参数。参考uAction常数表
uParam Long,参考uAction常数表
lpvParam Any,按引用调用的Integer、Long和数据结构。
fuWinIni 这个参数规定了在设置系统参数的时候,是否应更新用户设置参数
6 设置视窗的大小,SystemParametersInfo(6, 放大缩小值, P, 0),lpvParam为long型
17 开关屏保程序,SystemParametersInfo(17, False, P, 1),uParam为布尔型
13,24 改变桌面图标水平和垂直间距,uParam为间距值(像素),lpvParam为long型
15 设置屏保等待时间,SystemParametersInfo(15, 秒数, P, 1),lpvParam为long型
20 设置桌面背景墙纸,SystemParametersInfo(20, True, 图片路径, 1)
93 开关鼠标轨迹,SystemParametersInfo(93, 数值, P, 1),uParam为False则关闭
97 开关Ctrl+Alt+Del窗口,SystemParametersInfo(97, False, A, 0),uParam为布尔型
// 先获取是否启用屏幕保护
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &m_bScreenSaveActive, 0);
if (m_bScreenSaveActive)
{
// 阻止屏保
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0);
}
if (m_bScreenSaveActive)
{
// 取消阻止屏保
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0);
}
// 屏保设置
// 先获取是否启用屏幕保护
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &m_bScreenSaveActive, 0);
3.2 创建注册项、修改
// 开启屏保
/****
SCRNSAVE.EXE 有这个字段,代表开了,没有,代表关闭
无 找不到这个字段SCRNSAVE.EXE
3D文字 SCRNSAVE.EXE:C:\Windows\system32\ssText3d.scr
变幻线 SCRNSAVE.EXE:C:\Windows\system32\Mystify.scr
彩带 SCRNSAVE.EXE:C:\Windows\system32\Ribbons.scr
空白 SCRNSAVE.EXE:C:\Windows\system32\scrnsave.scr
气泡 SCRNSAVE.EXE:C:\Windows\system32\Bubbles.scr
照片 SCRNSAVE.EXE:C:\Windows\system32\PhotoScreensaver.scr
*/
bool openScreenSaver()
{
bool bIsScrSaveEnable = FALSE;
//根键、子键名称和到子键的句柄
HKEY hKey;//打开指定子键
DWORD dwDisposition=REG_OPENED_EXISTING_KEY;
//如果不存在就创建
LONG lRet=RegCreateKeyEx(HKEY_CURRENT_USER,TEXT("Control Panel\\Desktop"),0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition);
if(lRet!=ERROR_SUCCESS){
qDebug() << "RegCreateKeyEx error";
return FALSE;
}
// RegSetValueExW(
// In HKEY hKey,
// In_opt LPCWSTR lpValueName,
// Reserved DWORD Reserved,
// In DWORD dwType,
// _In_reads_bytes_opt_(cbData) CONST BYTE* lpData,
// In DWORD cbData
// );
LPCTSTR lpszValue = _T("C:\\Windows\\system32\\PhotoScreensaver.scr");
lRet=RegSetValueEx(hKey,TEXT("SCRNSAVE.EXE"), 0, REG_SZ, (CONST BYTE *)lpszValue, (_tcslen(lpszValue) + 1) * sizeof(TCHAR));
bIsScrSaveEnable = (lRet==ERROR_SUCCESS);
//关闭子键句柄
RegCloseKey(hKey);
hKey = NULL;
return bIsScrSaveEnable;
}
3.3 删除注册项
// 关闭屏保
// RegDeleteKey 删除项
// RegDeleteValue 删除值
// SCRNSAVE.EXE 是值
bool closeScreenSaver()
{
bool bIsScrSaveEnable = FALSE;
HKEY hKeySreenSaver = NULL;
long lReturn = NULL;
long lScreenSaver = NULL;
// RegOpenKeyExW(
// In HKEY hKey,
// In_opt LPCWSTR lpSubKey,
// In_opt DWORD ulOptions,
// In REGSAM samDesired,
// Out PHKEY phkResult
// );
lReturn = RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Control Panel\\Desktop"),0,KEY_ALL_ACCESS,&hKeySreenSaver);
if(lReturn == ERROR_SUCCESS)
{
// RegDeleteValueW(
// In HKEY hKey,
// In_opt LPCWSTR lpValueName
// );
lScreenSaver = RegDeleteValue(hKeySreenSaver,TEXT("SCRNSAVE.EXE"));
if(lScreenSaver == ERROR_SUCCESS){
qDebug() << "Screen Saver closed";
bIsScrSaveEnable = TRUE;
}
else{
qDebug() << "Screen Saver is Not closed" << lScreenSaver << TEXT("SCRNSAVE.EXE");
bIsScrSaveEnable = FALSE;
}
}
RegCloseKey(hKeySreenSaver);
hKeySreenSaver = NULL;
return bIsScrSaveEnable;
}
问题:怎么修改图片路径呢?
其他应用
// 设置触摸键盘模式
void TouchKeyboardManager::setTouchKeyboardMode(bool enable)
{
if(enable){
CloseKeyBoard();
}
DWORD dwValue = enable?1:0;
// TODO: 在此添加控件通知处理程序代码
HKEY hKey = NULL;
LONG lRet = ::RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\TabletTip\\1.7"), 0, KEY_ALL_ACCESS, &hKey);
if (lRet == ERROR_SUCCESS) {
::RegSetValueEx(hKey, TEXT("EnableDesktopModeAutoInvoke"), 0, REG_DWORD,(CONST BYTE*)&dwValue, sizeof(DWORD));
::RegCloseKey(hKey);
HWND window = ::FindWindowEx(nullptr, nullptr, WINDOW_CLASS, nullptr);
if (::IsWindow(window)) {
HRESULT hr = ::SendMessage(window, WM_SETTINGCHANGE, 0, 0);//通知TabTip,大概需要1ms
if (hr != S_OK) {
qDebug() << "::SendMessage(window, WM_SETTINGCHANGE, 0, 0) != S_OK";
::SendMessage(window, WM_SETTINGCHANGE, 0, 0);//再次通知TabTip
}
}
// SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0); //广播通知系统,大概需要800ms,太久了
}
}
4.项目应用需注意的问题
修改注册表需要谨慎,因为错误的修改可能会导致系统不稳定或无法启动。在修改注册表之前,建议备份注册表,创建还原点,并确保了解如何在发生问题时还原注册表。此外,使用第三方注册表清理实用程序时需要格外小心,因为这些工具可能会导致严重问题,如系统崩溃或数据丢失。
如何在 Windows 中备份和还原注册表 - Microsoft 支持