高端網站設計報價表百度推廣優(yōu)化排名怎么收費
1.注冊表
Windows注冊表是Windows操作系統(tǒng)中的一個關鍵組件,用于存儲系統(tǒng)和應用程序的配置信息。注冊表是一個層次結構的數(shù)據(jù)庫,它由多個鍵(key)和值(value)組成。
Windows系統(tǒng)注冊表是一個核心數(shù)據(jù)庫,用于存儲各種參數(shù),直接控制著Windows的啟動、硬件驅動程序的裝載以及一些Windows應用程序的運行。注冊表包含軟件、硬件和用戶首選項的設置,這些設置在Windows操作系統(tǒng)的啟動和運行過程中起著核心作用。
2.如何打開注冊表
-
在任務欄上的搜索框中,鍵入regedit,然后選擇"注冊表編輯器 (桌面應用) 結果。
-
右鍵單擊"開始", 然后選擇"運行"。 在"打開:"框中鍵入 regedit,然后選擇"確定"。(Win+R)
3. 增加、刪除、修改、查詢注冊表項
3.1 系統(tǒng)函數(shù)SystemParametersInfo 修改、查詢
應用SystemParametersInfo函數(shù)可以獲取和設置數(shù)量眾多的windows系統(tǒng)參數(shù)。
我們先來看看SystemParametersInfo函數(shù)的定義和參數(shù):
SystemParametersInfoW(
In UINT uiAction,
In UINT uiParam,
Pre_maybenull Post_valid PVOID pvParam,
In UINT fWinIni);
參數(shù):
uAction Long,指定要設置的參數(shù)。參考uAction常數(shù)表
uParam Long,參考uAction常數(shù)表
lpvParam Any,按引用調用的Integer、Long和數(shù)據(jù)結構。
fuWinIni 這個參數(shù)規(guī)定了在設置系統(tǒng)參數(shù)的時候,是否應更新用戶設置參數(shù)
6 設置視窗的大小,SystemParametersInfo(6, 放大縮小值, P, 0),lpvParam為long型
17 開關屏保程序,SystemParametersInfo(17, False, P, 1),uParam為布爾型
13,24 改變桌面圖標水平和垂直間距,uParam為間距值(像素),lpvParam為long型
15 設置屏保等待時間,SystemParametersInfo(15, 秒數(shù), P, 1),lpvParam為long型
20 設置桌面背景墻紙,SystemParametersInfo(20, True, 圖片路徑, 1)
93 開關鼠標軌跡,SystemParametersInfo(93, 數(shù)值, 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 創(chuàng)建注冊項、修改
// 開啟屏保
/****
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;
//如果不存在就創(chuàng)建
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); //廣播通知系統(tǒng),大概需要800ms,太久了
}
}
4.項目應用需注意的問題
修改注冊表需要謹慎,因為錯誤的修改可能會導致系統(tǒng)不穩(wěn)定或無法啟動。在修改注冊表之前,建議備份注冊表,創(chuàng)建還原點,并確保了解如何在發(fā)生問題時還原注冊表。此外,使用第三方注冊表清理實用程序時需要格外小心,因為這些工具可能會導致嚴重問題,如系統(tǒng)崩潰或數(shù)據(jù)丟失。
如何在 Windows 中備份和還原注冊表 - Microsoft 支持