我们进行Windows编程的时候,经常需要进行注册表操作,操作注册表请见下列实现代码与说明注释。
- /* 头文件 */
- #include <windows.h>
- #include <stdio.h>
- #include <tchar.h>
- /* 预定义 */
- #define MAX_KEY_LENGTH 255
- #define MAX_VALUE_NAME 16383
- /* ************************************
- * void QueryKey(HKEY hKey)
- * 功能 列举指定注册表项的子键
- **************************************/
- void QueryKey(HKEY hKey)
- {
- TCHAR achKey[MAX_KEY_LENGTH];
- DWORD cbName;
- TCHAR achClass[MAX_PATH] = TEXT("");
- DWORD cchClassName = MAX_PATH;
- DWORD cSubKeys=0;
- DWORD cbMaxSubKey;
- DWORD cchMaxClass;
- DWORD cValues;
- DWORD cchMaxValue;
- DWORD cbMaxValueData;
- DWORD cbSecurityDescriptor;
- FILETIME ftLastWriteTime;
- DWORD i, retCode;
- TCHAR achValue[MAX_VALUE_NAME];
- DWORD cchValue = MAX_VALUE_NAME;
- // 获取类名和数量
- retCode = RegQueryInfoKey(
- hKey, // 键的句柄
- achClass, // 类名
- &cchClassName, // 类名长度
- NULL, // 保留
- &cSubKeys, // 子键的数量
- &cbMaxSubKey, // 子键长度
- &cchMaxClass, // 类长度
- &cValues, // 子键键值数量
- &cchMaxValue, // 子键名长度
- &cbMaxValueData, // 键值长度
- &cbSecurityDescriptor, // 安全描述符
- &ftLastWriteTime); // 最后写时间
- // 列举子键
- if (cSubKeys)
- {
- printf( "\nNumber of subkeys: %d\n", cSubKeys);
- for (i=0; i<cSubKeys; i++)
- {
- cbName = MAX_KEY_LENGTH;
- retCode = RegEnumKeyEx(hKey, i,
- achKey,
- &cbName,
- NULL,
- NULL,
- NULL,
- &ftLastWriteTime);
- if (retCode == ERROR_SUCCESS)
- {
- printf(TEXT("(%d) %s\n"), i+1, achKey);
- }
- }
- }
- // 列举键值
- if (cValues)
- {
- printf( "\nNumber of values: %d\n", cValues);
- for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++)
- {
- cchValue = MAX_VALUE_NAME;
- achValue[0] = '\0';
- retCode = RegEnumValue(hKey, i,
- achValue,
- &cchValue,
- NULL,
- NULL,
- NULL,
- NULL);
- if (retCode == ERROR_SUCCESS )
- {
- printf(TEXT("(%d) %s\n"), i+1, achValue);
- }
- }
- }
- }
- /* ************************************
- * void AddKey(HKEY hKey)
- * 功能 增加一个子键,并设置键值
- **************************************/
- void AddKey(HKEY hKey)
- {
- HKEY hSubKey;
- DWORD dwKeyValue = 100;
- // 创建键
- RegCreateKey(hKey,"MySoftware",&hSubKey);
- // 设置键值
- if( ERROR_SUCCESS != RegSetValueEx(
- hSubKey,
- "TEST",
- 0,
- REG_DWORD,
- (LPBYTE)&dwKeyValue,
- sizeof(DWORD)))
- {
- printf("error\n");
- }
- }
- /* ************************************
- * void main(void)
- * 功能 打开键,获得键句柄
- **************************************/
- void main(void)
- {
- HKEY hTestKey;
- if( RegOpenKeyEx( HKEY_CURRENT_USER,
- TEXT("SOFTWARE"),
- 0,
- KEY_READ | KEY_WRITE,
- &hTestKey) == ERROR_SUCCESS
- )
- {
- // 增加键
- AddKey(hTestKey);
- // 列举子键
- QueryKey(hTestKey);
- }
- }
我们进行Windows编程的时候,经常需要获取时间与设置时间,操作时间请见下列实现代码与说明注释。
- **************************************/
- #include <Windows.h>
- #include <stdio.h>
- /* ************************************
- * int main()
- * 功能 获取并显示系统当前时间,然后将时间提前一个小时
- **************************************/
- int main()
- {
- SYSTEMTIME st;
- // 获取当前时间,以本时区时间格式
- GetLocalTime( &st );
- printf("Now: %d-%d-%d, %d:%d:%d",
- st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
- // 提前一小时
- st.wHour --;
- // 设置当前系统时间
- SetLocalTime( &st );
- }
本文介绍了在Windows编程中如何操作注册表,包括创建、枚举子键和键值等,并展示了如何获取与设置系统时间。
1万+

被折叠的 条评论
为什么被折叠?



