#include BOOL GetRegVal(char *subKey, char *name, void *p, int len) { HKEY hKey; DWORD valType, valSize = (DWORD)len; LONG r; if (! RegOpenKeyEx(HKEY_CURRENT_USER, subKey, 0, KEY_ALL_ACCESS, &hKey)) { r = RegQueryValueEx(hKey, name, NULL, &valType, (LPBYTE)p, &valSize); RegCloseKey(hKey); if (r) return FALSE; else return TRUE; } else return FALSE; } void SetRegVal(char *subKey, char *name, void *p, int len) { HKEY hKey; DWORD disposition; RegCreateKeyEx(HKEY_CURRENT_USER, subKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &disposition); RegSetValueEx(hKey, name, 0, REG_BINARY, (CONST BYTE*)p, (DWORD)len); RegCloseKey(hKey); } BOOL GetPlacement(char *subKey, RECT *rect) { if (GetRegVal(subKey, "Placement", rect, sizeof(RECT))) return TRUE; else return FALSE; } void SavePlacement(HWND hwnd, char *subKey) { RECT rect; GetWindowRect(hwnd, &rect); SetRegVal(subKey, "Placement", &rect, sizeof(RECT)); } BOOL SaveKey(char *subKey, char *fileName) { HKEY hKey; if (! RegOpenKeyEx(HKEY_CURRENT_USER, subKey, 0, KEY_ALL_ACCESS, &hKey)) { if (RegSaveKey(hKey, (LPCTSTR)fileName, NULL)) { RegCloseKey(hKey); return FALSE; } RegCloseKey(hKey); return TRUE; } else return FALSE; } BOOL RestoreKey(char *subKey, char *fileName) { HKEY hKey; if (! RegOpenKeyEx(HKEY_CURRENT_USER, subKey, 0, KEY_ALL_ACCESS, &hKey)) { if (RegRestoreKey(hKey, (LPCTSTR)fileName, 0)) { RegCloseKey(hKey); return FALSE; } RegCloseKey(hKey); return TRUE; } else return FALSE; } .