registry saving/loading for new batch of settings

This commit is contained in:
freedom
2023-07-22 02:09:35 -06:00
parent 34fae5033b
commit 48947ea049
2 changed files with 93 additions and 24 deletions

View File

@@ -2,7 +2,7 @@
REGISTRY.C - REGISTRY.C -
Copyright (c) 2023 freedom7341, Freedom Desktop Copyright (c) 2023 freedom7341, Freedom Desktop
DESCRIPTION - DESCRIPTION -
Program Manager's registry related functions. Program Manager's registry and settings related functions.
LICENSE INFORMATION - LICENSE INFORMATION -
MIT License, see LICENSE.txt in the root folder MIT License, see LICENSE.txt in the root folder
\* * * * * * * */ \* * * * * * * */
@@ -13,31 +13,52 @@
// #define WIN32_LEAN_AND_MEAN // #define WIN32_LEAN_AND_MEAN
#include <Windows.h> #include <Windows.h>
#include <shlwapi.h> #include <shlwapi.h>
#include <strsafe.h>
/* Variables */ /* Variables */
// Global HKEYs // Global HKEYs
HKEY hKeyProgramManager = NULL; HKEY hKeyProgramManager = NULL;
HKEY hKeyProgramGroups = NULL; HKEY hKeyProgramGroups = NULL;
HKEY hKeySettings = NULL; HKEY hKeySettings = NULL;
// Global Values
BOOL bSaveSettings;
BOOL bShowUsername;
BOOL bTopMost;
BOOL bMinOnRun;
BOOL bAutoArrange;
DWORD dwSettingsMask = {
PMS_SAVESETTINGS |
PMS_SHOWUSERNAME |
!PMS_TOPMOST |
!PMS_MINONRUN |
PMS_AUTOARRANGE
};
RECT rcMainWindow;
// Registry Subkeys // Registry Subkeys
PWSTR szProgramGroups = L"Program Groups"; PWSTR pszProgramGroups = L"Program Groups";
PWSTR szSettings = L"Settings"; PWSTR pszSettings = L"Settings";
// Settings Subkeys
PWSTR pszSettingsWindow = L"Window";
PWSTR pszSettingsMask = L"SettingsMask";
/* Functions */ /* Functions */
/* * * *\ /* * * *\
InitializeRegistryKeys - InitializeRegistryKeys -
Takes the relevant Registry Keys and turns them Takes the relevant registry keys and turns them
into valid and usable handles. into valid and usable handles.
RETURNS - RETURNS -
True if successful, false if unsuccessful. TRUE if successful, FALSE if unsuccessful.
\* * * */ \* * * */
BOOL InitializeRegistryKeys() BOOL InitializeRegistryKeys()
{ {
if (!RegCreateKeyEx(HKEY_CURRENT_USER, PROGMGR_KEY, 0, szProgMgr, 0, KEY_READ | KEY_WRITE, NULL, &hKeyProgramManager, NULL)) { if (!RegCreateKeyEx(HKEY_CURRENT_USER, PROGMGR_KEY, 0, szProgMgr, 0,
RegCreateKeyEx(hKeyProgramManager, szProgramGroups, 0, szProgMgr, 0, KEY_READ | KEY_WRITE, NULL, &hKeyProgramManager, NULL))
{
// Create Program Groups and Settings keys
RegCreateKeyEx(hKeyProgramManager, pszProgramGroups, 0, szProgMgr, 0,
KEY_READ | KEY_WRITE, NULL, &hKeyProgramGroups, NULL); KEY_READ | KEY_WRITE, NULL, &hKeyProgramGroups, NULL);
RegCreateKeyEx(hKeyProgramManager, szSettings, 0, szProgMgr, 0, RegCreateKeyEx(hKeyProgramManager, pszSettings, 0, szProgMgr, 0,
KEY_READ | KEY_WRITE, NULL, &hKeySettings, NULL); KEY_READ | KEY_WRITE, NULL, &hKeySettings, NULL);
return TRUE; return TRUE;
@@ -49,31 +70,38 @@ BOOL InitializeRegistryKeys()
IsProgMgrDefaultShell - IsProgMgrDefaultShell -
Detects if Program Manager is the default shell. Detects if Program Manager is the default shell.
RETURNS - RETURNS -
True if Program Manager is the default shell, TRUE if Program Manager is the default shell,
false if otherwise or an error occurs. FALSE if otherwise or an error occurs.
\* * * */ \* * * */
BOOL IsProgMgrDefaultShell() BOOL IsProgMgrDefaultShell()
{ {
HKEY hKeyWinlogon; HKEY hKeyWinlogon;
WCHAR szShell[HKEYMAXLEN] = L""; WCHAR szShell[HKEYMAXLEN] = L"";
DWORD dwType; DWORD dwType;
DWORD dwBufferSize; DWORD dwBufferSize = 0;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WINLOGON_KEY, 0, KEY_READ, &hKeyWinlogon) == ERROR_SUCCESS) { if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WINLOGON_KEY,
if (RegQueryValueEx(hKeyWinlogon, L"Shell", 0, &dwType, (LPBYTE)szShell, &dwBufferSize) == ERROR_SUCCESS) { 0, KEY_READ, &hKeyWinlogon) == ERROR_SUCCESS)
if (StrStr(szShell, szProgMgr)) { {
if (RegQueryValueEx(hKeyWinlogon, L"Shell", 0,
&dwType, (LPBYTE)szShell, &dwBufferSize) == ERROR_SUCCESS)
{
if (StrStr(szShell, szProgMgr))
{
// ProgMgr detected >:) // ProgMgr detected >:)
RegCloseKey(hKeyWinlogon); RegCloseKey(hKeyWinlogon);
return TRUE; return TRUE;
} }
else { else
{
// Inferior shell detected. // Inferior shell detected.
RegCloseKey(hKeyWinlogon); RegCloseKey(hKeyWinlogon);
return FALSE; return FALSE;
} }
} }
} }
else { else
{
// Assume that we're the shell... just incase. // Assume that we're the shell... just incase.
RegCloseKey(hKeyWinlogon); RegCloseKey(hKeyWinlogon);
return TRUE; return TRUE;
@@ -83,23 +111,50 @@ BOOL IsProgMgrDefaultShell()
} }
/* * * *\ /* * * *\
QueryConfig - SaveConfig -
Finds all settings and retrieves them from the registry. Finds and collapses all settings and saves them to the registry.
RETURNS - RETURNS -
True if successful, false if unsuccessful. TRUE if successful, FALSE if unsuccessful.
\* * * */ \* * * */
BOOL QueryConfig() BOOL SaveConfig()
{ {
// Shrink the settings into the bitmask
dwSettingsMask =
(bSaveSettings * PMS_SAVESETTINGS) |
(bShowUsername * PMS_SHOWUSERNAME) |
(bTopMost * PMS_TOPMOST) |
(bMinOnRun * PMS_MINONRUN) |
(bAutoArrange * PMS_AUTOARRANGE);
// Save settings bitmask
if (RegSetValueEx(hKeySettings, pszSettingsMask, 0, REG_DWORD, &dwSettingsMask, sizeof(DWORD)) == ERROR_SUCCESS)
{
return TRUE;
}
return FALSE; return FALSE;
} }
/* * * *\ /* * * *\
SaveConfig - BOOL LoadConfig() -
Finds all settings and saves them to the registry. Finds all settings and retrieves them from the registry.
RETURNS - RETURNS -
True if successful, false if unsuccessful. TRUE if successful, FALSE if unsuccessful.
\* * * */ \* * * */
BOOL SaveConfig() BOOL LoadConfig()
{ {
DWORD dwBufferSize = 0;
// Load settings bitmask
if (RegGetValue(hKeySettings, L"", pszSettingsMask, RRF_RT_DWORD, NULL, &dwSettingsMask, &dwBufferSize))
{
bSaveSettings = ((dwSettingsMask & PMS_SAVESETTINGS) == PMS_SAVESETTINGS);
bShowUsername = ((dwSettingsMask & PMS_SHOWUSERNAME) == PMS_SHOWUSERNAME);
bTopMost = ((dwSettingsMask & PMS_TOPMOST) == PMS_TOPMOST);
bMinOnRun = ((dwSettingsMask & PMS_MINONRUN) == PMS_MINONRUN);
bAutoArrange = ((dwSettingsMask & PMS_AUTOARRANGE) == PMS_AUTOARRANGE);
return TRUE;
}
return FALSE; return FALSE;
} }

View File

@@ -20,13 +20,27 @@
// #define PROGMAN_KEY L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Program Manager" // #define PROGMAN_KEY L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Program Manager"
// #define WINDOWS_KEY L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows" // #define WINDOWS_KEY L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows"
#define PROGMGR_KEY L"Software\\Freedom Desktop\\Program Manager II" #define PROGMGR_KEY L"Software\\Freedom Desktop\\Program Manager II"
// Settings Bitmask Values (DWORD)
#define PMS_SAVESETTINGS 0x00000001
#define PMS_SHOWUSERNAME 0x00000002
#define PMS_TOPMOST 0x00000004
#define PMS_MINONRUN 0x00000008
#define PMS_AUTOARRANGE 0x00000010
/* Global Variables */ /* Global Variables */
// HKEYs // HKEYs
extern HKEY hKeyProgramManager; extern HKEY hKeyProgramManager;
extern HKEY hkeyProgramGroups; extern HKEY hkeyProgramGroups;
extern HKEY hKeySettings; extern HKEY hKeySettings;
// Settings
extern BOOL bSaveSettings;
extern BOOL bShowUsername;
extern BOOL bTopMost;
extern BOOL bMinOnRun;
extern BOOL bAutoArrange;
/* Function Prototypes */ /* Function Prototypes */
BOOL InitializeRegistryKeys(VOID); BOOL InitializeRegistryKeys(VOID);
BOOL IsProgMgrDefaultShell(VOID); BOOL IsProgMgrDefaultShell(VOID);
BOOL LoadConfig(VOID);
BOOL SaveConfig(VOID);