可以说wince对注册表可以进行N多操作,比如声音,屏幕亮度等等,今天记录一下操作注册表的方法,以便以后查找
首先,上两个函数,写入/读取注册表,这两个函数可以用于Win32/WM/WinCE,支持Unicode/ANSI编码.我是抄自M8的待机助手哈
bool RegWriteDWORD(IN HKEY const hKeyName,IN LPCTSTR lpSubKey,IN LPCTSTR lpValueName,IN DWORD const dwValue,IN bool bCreateKey)
{
HKEY hKey = NULL;
LONG lRet=0;
if (bCreateKey)
{
DWORD dwDisposition = 0; //REG_CREATED_NEW_KEY, REG_OPENED_EXISTING_KEY
lRet=::RegCreateKeyEx(hKeyName, lpSubKey, 0, NULL,REG_OPTION_NON_VOLATILE ,0 , NULL, &hKey, &dwDisposition);
}
else
{
lRet=::RegOpenKeyEx(hKeyName,lpSubKey, 0, NULL,&hKey);
}
if (ERROR_SUCCESS==lRet)
{
::RegSetValueEx(hKey,lpValueName, 0, REG_DWORD,(BYTE *)&dwValue, sizeof(dwValue));
::RegCloseKey(hKey);
return true;
}
return false;
}
//
bool RegReadDWORD(IN HKEY const hKeyName,IN LPCTSTR lpSubKey,IN LPCTSTR lpValueName,OUT DWORD &dwValue)
{
HKEY hKey = NULL;
DWORD dwSize=sizeof(dwValue);
if (ERROR_SUCCESS==::RegOpenKeyEx(hKeyName,lpSubKey, 0, NULL,&hKey))
{
LONG lQueryRe=::RegQueryValueEx(hKey, lpValueName, NULL,NULL,(BYTE *)&dwValue,&dwSize);
::RegCloseKey(hKey);
if (ERROR_SUCCESS==lQueryRe)
{
return true;
}
else
{
return false;
}
}
return false;
}
这两个函数可以操作很多注册表消息了,使用如下:
//用来关闭屏幕按键声音
RegReadDWORD(HKEY_CURRENT_USER, L"ControlPanel//Volume",L"Key",dwGetValve);
RegWriteDWORD(HKEY_CURRENT_USER, L"ControlPanel//Volume",L"Key",65536,true);
//用来关闭点击屏幕声音
RegReadDWORD(HKEY_CURRENT_USER, L"ControlPanel//Volume",L"Screen",dwGetValve);
RegWriteDWORD(HKEY_CURRENT_USER, L"ControlPanel//Volume",L"Screen",65536,true);
这里要说一下,刚开始写的时候一直无效,后来发现当Key 或者Screen 为65536的时候才是关闭,0不是。。
但是对于某些键值,如Volume,当修改注册表后是没效果的,因为修改了注册表,并没有通知系统去更改配置,所以用到了一个微软并未公布的函数:AudioUpdateFromRegistry
用法:
DLL_AUDIOUPDATEFROMREGISTRY Dll_AudioUpdateFromRegistry = NULL;
HINSTANCE hCoreDll = LoadLibrary(TEXT("coredll.dll"));
if (hCoreDll)
{
Dll_AudioUpdateFromRegistry = (DLL_AUDIOUPDATEFROMREGISTRY)GetProcAddress(hCoreDll, _T("AudioUpdateFromRegistry")); // 调用该API
if (Dll_AudioUpdateFromRegistry)
{
(Dll_AudioUpdateFromRegistry)();
}
FreeLibrary(hCoreDll);
}
也就是每次修改注册表都通知一下系统~这样所有修改注册表的操作都生效了~