registry saving/loading for new batch of settings
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user