mirror of
https://github.com/reactos/reactos.git
synced 2024-07-14 00:25:05 +00:00
[FORMATTING] Fix indentation
svn path=/trunk/; revision=31653
This commit is contained in:
parent
b195ebe655
commit
cd933bb16c
|
@ -38,113 +38,115 @@
|
||||||
|
|
||||||
static LONG
|
static LONG
|
||||||
ReadRegSzKey(
|
ReadRegSzKey(
|
||||||
IN HKEY hKey,
|
IN HKEY hKey,
|
||||||
IN LPCWSTR pszKey,
|
IN LPCWSTR pszKey,
|
||||||
OUT LPWSTR* pValue)
|
OUT LPWSTR* pValue)
|
||||||
{
|
{
|
||||||
LONG rc;
|
LONG rc;
|
||||||
DWORD dwType;
|
DWORD dwType;
|
||||||
DWORD cbData = 0;
|
DWORD cbData = 0;
|
||||||
LPWSTR Value;
|
LPWSTR Value;
|
||||||
|
|
||||||
rc = RegQueryValueExW(hKey, pszKey, NULL, &dwType, NULL, &cbData);
|
rc = RegQueryValueExW(hKey, pszKey, NULL, &dwType, NULL, &cbData);
|
||||||
if (rc != ERROR_SUCCESS)
|
if (rc != ERROR_SUCCESS)
|
||||||
return rc;
|
return rc;
|
||||||
if (dwType != REG_SZ)
|
if (dwType != REG_SZ)
|
||||||
return ERROR_FILE_NOT_FOUND;
|
return ERROR_FILE_NOT_FOUND;
|
||||||
Value = (WCHAR*) HeapAlloc(GetProcessHeap(), 0, cbData + sizeof(WCHAR));
|
Value = (WCHAR*) HeapAlloc(GetProcessHeap(), 0, cbData + sizeof(WCHAR));
|
||||||
if (!Value)
|
if (!Value)
|
||||||
return ERROR_NOT_ENOUGH_MEMORY;
|
return ERROR_NOT_ENOUGH_MEMORY;
|
||||||
rc = RegQueryValueExW(hKey, pszKey, NULL, NULL, (LPBYTE)Value, &cbData);
|
rc = RegQueryValueExW(hKey, pszKey, NULL, NULL, (LPBYTE)Value, &cbData);
|
||||||
if (rc != ERROR_SUCCESS)
|
if (rc != ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, Value);
|
HeapFree(GetProcessHeap(), 0, Value);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
/* NULL-terminate the string */
|
/* NULL-terminate the string */
|
||||||
Value[cbData / sizeof(WCHAR)] = '\0';
|
Value[cbData / sizeof(WCHAR)] = '\0';
|
||||||
|
|
||||||
*pValue = Value;
|
*pValue = Value;
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
BOOL IsConsoleShell(void)
|
BOOL IsConsoleShell(VOID)
|
||||||
{
|
{
|
||||||
HKEY ControlKey = NULL;
|
HKEY ControlKey = NULL;
|
||||||
LPWSTR SystemStartOptions = NULL;
|
LPWSTR SystemStartOptions = NULL;
|
||||||
LPWSTR CurrentOption, NextOption; /* Pointers into SystemStartOptions */
|
LPWSTR CurrentOption, NextOption; /* Pointers into SystemStartOptions */
|
||||||
LONG rc;
|
LONG rc;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
|
|
||||||
rc = RegOpenKeyEx(
|
rc = RegOpenKeyEx(
|
||||||
HKEY_LOCAL_MACHINE,
|
HKEY_LOCAL_MACHINE,
|
||||||
REGSTR_PATH_CURRENT_CONTROL_SET,
|
REGSTR_PATH_CURRENT_CONTROL_SET,
|
||||||
0,
|
0,
|
||||||
KEY_QUERY_VALUE,
|
KEY_QUERY_VALUE,
|
||||||
&ControlKey);
|
&ControlKey);
|
||||||
|
|
||||||
rc = ReadRegSzKey(ControlKey, L"SystemStartOptions", &SystemStartOptions);
|
rc = ReadRegSzKey(ControlKey, L"SystemStartOptions", &SystemStartOptions);
|
||||||
if (rc != ERROR_SUCCESS)
|
if (rc != ERROR_SUCCESS)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
/* Check for CONSOLE in SystemStartOptions */
|
/* Check for CONSOLE in SystemStartOptions */
|
||||||
CurrentOption = SystemStartOptions;
|
CurrentOption = SystemStartOptions;
|
||||||
while (CurrentOption)
|
while (CurrentOption)
|
||||||
{
|
{
|
||||||
NextOption = wcschr(CurrentOption, L' ');
|
NextOption = wcschr(CurrentOption, L' ');
|
||||||
if (NextOption)
|
if (NextOption)
|
||||||
*NextOption = L'\0';
|
*NextOption = L'\0';
|
||||||
if (wcsicmp(CurrentOption, L"CONSOLE") == 0)
|
if (wcsicmp(CurrentOption, L"CONSOLE") == 0)
|
||||||
{
|
{
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
CurrentOption = NextOption ? NextOption + 1 : NULL;
|
CurrentOption = NextOption ? NextOption + 1 : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (ControlKey != NULL)
|
if (ControlKey != NULL)
|
||||||
RegCloseKey(ControlKey);
|
RegCloseKey(ControlKey);
|
||||||
HeapFree(GetProcessHeap(), 0, SystemStartOptions);
|
HeapFree(GetProcessHeap(), 0, SystemStartOptions);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
BOOL GetShell(WCHAR *CommandLine, HKEY hRootKey)
|
BOOL GetShell(
|
||||||
|
OUT WCHAR *CommandLine, /* must be at least MAX_PATH long */
|
||||||
|
IN HKEY hRootKey)
|
||||||
{
|
{
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
DWORD Type, Size;
|
DWORD Type, Size;
|
||||||
WCHAR Shell[MAX_PATH];
|
WCHAR Shell[MAX_PATH];
|
||||||
BOOL Ret = FALSE;
|
BOOL Ret = FALSE;
|
||||||
BOOL ConsoleShell = IsConsoleShell();
|
BOOL ConsoleShell = IsConsoleShell();
|
||||||
|
|
||||||
if(RegOpenKeyEx(hRootKey,
|
if (RegOpenKeyEx(hRootKey, REGSTR_PATH_WINLOGON,
|
||||||
L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", /* FIXME: should be REGSTR_PATH_WINLOGON */
|
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
||||||
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
Size = MAX_PATH * sizeof(WCHAR);
|
|
||||||
if(RegQueryValueEx(hKey,
|
|
||||||
ConsoleShell ? L"ConsoleShell" : L"Shell",
|
|
||||||
NULL,
|
|
||||||
&Type,
|
|
||||||
(LPBYTE)Shell,
|
|
||||||
&Size) == ERROR_SUCCESS)
|
|
||||||
{
|
{
|
||||||
if((Type == REG_SZ) || (Type == REG_EXPAND_SZ))
|
Size = MAX_PATH * sizeof(WCHAR);
|
||||||
{
|
if (RegQueryValueEx(hKey,
|
||||||
wcscpy(CommandLine, Shell);
|
ConsoleShell ? L"ConsoleShell" : L"Shell",
|
||||||
Ret = TRUE;
|
NULL,
|
||||||
}
|
&Type,
|
||||||
|
(LPBYTE)Shell,
|
||||||
|
&Size) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
if ((Type == REG_SZ) || (Type == REG_EXPAND_SZ))
|
||||||
|
{
|
||||||
|
wcscpy(CommandLine, Shell);
|
||||||
|
Ret = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RegCloseKey(hKey);
|
||||||
}
|
}
|
||||||
RegCloseKey(hKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Ret;
|
return Ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
StartAutoApplications(int clsid)
|
StartAutoApplications(
|
||||||
|
IN INT clsid)
|
||||||
{
|
{
|
||||||
WCHAR szPath[MAX_PATH] = {0};
|
WCHAR szPath[MAX_PATH] = {0};
|
||||||
HRESULT hResult;
|
HRESULT hResult;
|
||||||
|
@ -157,303 +159,307 @@ StartAutoApplications(int clsid)
|
||||||
len = wcslen(szPath);
|
len = wcslen(szPath);
|
||||||
if (!SUCCEEDED(hResult) || len == 0)
|
if (!SUCCEEDED(hResult) || len == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wcscat(szPath, L"\\*");
|
wcscat(szPath, L"\\*");
|
||||||
hFind = FindFirstFileW(szPath, &findData);
|
hFind = FindFirstFileW(szPath, &findData);
|
||||||
if (hFind == INVALID_HANDLE_VALUE)
|
if (hFind == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
szPath[len] = L'\0';
|
szPath[len] = L'\0';
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (findData.nFileSizeHigh || findData.nFileSizeLow))
|
if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (findData.nFileSizeHigh || findData.nFileSizeLow))
|
||||||
{
|
{
|
||||||
memset(&ExecInfo, 0x0, sizeof(SHELLEXECUTEINFOW));
|
memset(&ExecInfo, 0x0, sizeof(SHELLEXECUTEINFOW));
|
||||||
ExecInfo.cbSize = sizeof(ExecInfo);
|
ExecInfo.cbSize = sizeof(ExecInfo);
|
||||||
ExecInfo.lpVerb = L"open";
|
ExecInfo.lpVerb = L"open";
|
||||||
ExecInfo.lpFile = findData.cFileName;
|
ExecInfo.lpFile = findData.cFileName;
|
||||||
ExecInfo.lpDirectory = szPath;
|
ExecInfo.lpDirectory = szPath;
|
||||||
ShellExecuteExW(&ExecInfo);
|
ShellExecuteExW(&ExecInfo);
|
||||||
}
|
}
|
||||||
}while(FindNextFileW(hFind, &findData));
|
} while (FindNextFileW(hFind, &findData));
|
||||||
FindClose(hFind);
|
FindClose(hFind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static BOOL
|
static BOOL
|
||||||
TryToStartShell(LPCWSTR Shell)
|
TryToStartShell(
|
||||||
|
IN LPCWSTR Shell)
|
||||||
{
|
{
|
||||||
STARTUPINFO si;
|
STARTUPINFO si;
|
||||||
PROCESS_INFORMATION pi;
|
PROCESS_INFORMATION pi;
|
||||||
WCHAR ExpandedShell[MAX_PATH];
|
WCHAR ExpandedShell[MAX_PATH];
|
||||||
|
|
||||||
ZeroMemory(&si, sizeof(STARTUPINFO));
|
ZeroMemory(&si, sizeof(STARTUPINFO));
|
||||||
si.cb = sizeof(STARTUPINFO);
|
si.cb = sizeof(STARTUPINFO);
|
||||||
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
|
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
|
||||||
|
|
||||||
ExpandEnvironmentStrings(Shell, ExpandedShell, MAX_PATH);
|
ExpandEnvironmentStrings(Shell, ExpandedShell, MAX_PATH);
|
||||||
|
|
||||||
if(!CreateProcess(NULL,
|
if (!CreateProcess(NULL,
|
||||||
ExpandedShell,
|
ExpandedShell,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
FALSE,
|
FALSE,
|
||||||
NORMAL_PRIORITY_CLASS,
|
NORMAL_PRIORITY_CLASS,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
&si,
|
&si,
|
||||||
&pi))
|
&pi))
|
||||||
return FALSE;
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
StartAutoApplications(CSIDL_STARTUP);
|
StartAutoApplications(CSIDL_STARTUP);
|
||||||
StartAutoApplications(CSIDL_COMMON_STARTUP);
|
StartAutoApplications(CSIDL_COMMON_STARTUP);
|
||||||
WaitForSingleObject(pi.hProcess, INFINITE);
|
WaitForSingleObject(pi.hProcess, INFINITE);
|
||||||
CloseHandle(pi.hProcess);
|
CloseHandle(pi.hProcess);
|
||||||
CloseHandle(pi.hThread);
|
CloseHandle(pi.hThread);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
void StartShell(void)
|
VOID StartShell(VOID)
|
||||||
{
|
{
|
||||||
WCHAR Shell[MAX_PATH];
|
WCHAR Shell[MAX_PATH];
|
||||||
TCHAR szMsg[RC_STRING_MAX_SIZE];
|
TCHAR szMsg[RC_STRING_MAX_SIZE];
|
||||||
|
|
||||||
/* Try to run shell in user key */
|
/* Try to run shell in user key */
|
||||||
if (GetShell(Shell, HKEY_CURRENT_USER) && TryToStartShell(Shell))
|
if (GetShell(Shell, HKEY_CURRENT_USER) && TryToStartShell(Shell))
|
||||||
return;
|
|
||||||
|
|
||||||
/* Try to run shell in local machine key */
|
|
||||||
if (GetShell(Shell, HKEY_LOCAL_MACHINE) && TryToStartShell(Shell))
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Try default shell */
|
|
||||||
if (IsConsoleShell())
|
|
||||||
{
|
{
|
||||||
if(GetSystemDirectory(Shell, MAX_PATH - 8))
|
return;
|
||||||
wcscat(Shell, L"\\cmd.exe");
|
}
|
||||||
else
|
|
||||||
wcscpy(Shell, L"cmd.exe");
|
/* Try to run shell in local machine key */
|
||||||
|
if (GetShell(Shell, HKEY_LOCAL_MACHINE) && TryToStartShell(Shell))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Try default shell */
|
||||||
|
if (IsConsoleShell())
|
||||||
|
{
|
||||||
|
if (GetSystemDirectory(Shell, MAX_PATH - 8))
|
||||||
|
wcscat(Shell, L"\\cmd.exe");
|
||||||
|
else
|
||||||
|
wcscpy(Shell, L"cmd.exe");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(GetWindowsDirectory(Shell, MAX_PATH - 13))
|
if (GetWindowsDirectory(Shell, MAX_PATH - 13))
|
||||||
wcscat(Shell, L"\\explorer.exe");
|
wcscat(Shell, L"\\explorer.exe");
|
||||||
else
|
else
|
||||||
wcscpy(Shell, L"explorer.exe");
|
wcscpy(Shell, L"explorer.exe");
|
||||||
|
}
|
||||||
|
if (!TryToStartShell(Shell))
|
||||||
|
{
|
||||||
|
LoadString( GetModuleHandle(NULL), STRING_USERINIT_FAIL, szMsg, sizeof(szMsg) / sizeof(szMsg[0]));
|
||||||
|
MessageBox(0, szMsg, NULL, 0);
|
||||||
}
|
}
|
||||||
if (!TryToStartShell(Shell))
|
|
||||||
{
|
|
||||||
LoadString( GetModuleHandle(NULL), STRING_USERINIT_FAIL, szMsg, sizeof(szMsg) / sizeof(szMsg[0]));
|
|
||||||
MessageBox(0, szMsg, NULL, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WCHAR g_RegColorNames[][32] =
|
WCHAR g_RegColorNames[][32] = {
|
||||||
{L"Scrollbar", /* 00 = COLOR_SCROLLBAR */
|
L"Scrollbar", /* 00 = COLOR_SCROLLBAR */
|
||||||
L"Background", /* 01 = COLOR_DESKTOP */
|
L"Background", /* 01 = COLOR_DESKTOP */
|
||||||
L"ActiveTitle", /* 02 = COLOR_ACTIVECAPTION */
|
L"ActiveTitle", /* 02 = COLOR_ACTIVECAPTION */
|
||||||
L"InactiveTitle", /* 03 = COLOR_INACTIVECAPTION */
|
L"InactiveTitle", /* 03 = COLOR_INACTIVECAPTION */
|
||||||
L"Menu", /* 04 = COLOR_MENU */
|
L"Menu", /* 04 = COLOR_MENU */
|
||||||
L"Window", /* 05 = COLOR_WINDOW */
|
L"Window", /* 05 = COLOR_WINDOW */
|
||||||
L"WindowFrame", /* 06 = COLOR_WINDOWFRAME */
|
L"WindowFrame", /* 06 = COLOR_WINDOWFRAME */
|
||||||
L"MenuText", /* 07 = COLOR_MENUTEXT */
|
L"MenuText", /* 07 = COLOR_MENUTEXT */
|
||||||
L"WindowText", /* 08 = COLOR_WINDOWTEXT */
|
L"WindowText", /* 08 = COLOR_WINDOWTEXT */
|
||||||
L"TitleText", /* 09 = COLOR_CAPTIONTEXT */
|
L"TitleText", /* 09 = COLOR_CAPTIONTEXT */
|
||||||
L"ActiveBorder", /* 10 = COLOR_ACTIVEBORDER */
|
L"ActiveBorder", /* 10 = COLOR_ACTIVEBORDER */
|
||||||
L"InactiveBorder", /* 11 = COLOR_INACTIVEBORDER */
|
L"InactiveBorder", /* 11 = COLOR_INACTIVEBORDER */
|
||||||
L"AppWorkSpace", /* 12 = COLOR_APPWORKSPACE */
|
L"AppWorkSpace", /* 12 = COLOR_APPWORKSPACE */
|
||||||
L"Hilight", /* 13 = COLOR_HIGHLIGHT */
|
L"Hilight", /* 13 = COLOR_HIGHLIGHT */
|
||||||
L"HilightText", /* 14 = COLOR_HIGHLIGHTTEXT */
|
L"HilightText", /* 14 = COLOR_HIGHLIGHTTEXT */
|
||||||
L"ButtonFace", /* 15 = COLOR_BTNFACE */
|
L"ButtonFace", /* 15 = COLOR_BTNFACE */
|
||||||
L"ButtonShadow", /* 16 = COLOR_BTNSHADOW */
|
L"ButtonShadow", /* 16 = COLOR_BTNSHADOW */
|
||||||
L"GrayText", /* 17 = COLOR_GRAYTEXT */
|
L"GrayText", /* 17 = COLOR_GRAYTEXT */
|
||||||
L"ButtonText", /* 18 = COLOR_BTNTEXT */
|
L"ButtonText", /* 18 = COLOR_BTNTEXT */
|
||||||
L"InactiveTitleText", /* 19 = COLOR_INACTIVECAPTIONTEXT */
|
L"InactiveTitleText", /* 19 = COLOR_INACTIVECAPTIONTEXT */
|
||||||
L"ButtonHilight", /* 20 = COLOR_BTNHIGHLIGHT */
|
L"ButtonHilight", /* 20 = COLOR_BTNHIGHLIGHT */
|
||||||
L"ButtonDkShadow", /* 21 = COLOR_3DDKSHADOW */
|
L"ButtonDkShadow", /* 21 = COLOR_3DDKSHADOW */
|
||||||
L"ButtonLight", /* 22 = COLOR_3DLIGHT */
|
L"ButtonLight", /* 22 = COLOR_3DLIGHT */
|
||||||
L"InfoText", /* 23 = COLOR_INFOTEXT */
|
L"InfoText", /* 23 = COLOR_INFOTEXT */
|
||||||
L"InfoWindow", /* 24 = COLOR_INFOBK */
|
L"InfoWindow", /* 24 = COLOR_INFOBK */
|
||||||
L"ButtonAlternateFace", /* 25 = COLOR_ALTERNATEBTNFACE */
|
L"ButtonAlternateFace", /* 25 = COLOR_ALTERNATEBTNFACE */
|
||||||
L"HotTrackingColor", /* 26 = COLOR_HOTLIGHT */
|
L"HotTrackingColor", /* 26 = COLOR_HOTLIGHT */
|
||||||
L"GradientActiveTitle", /* 27 = COLOR_GRADIENTACTIVECAPTION */
|
L"GradientActiveTitle", /* 27 = COLOR_GRADIENTACTIVECAPTION */
|
||||||
L"GradientInactiveTitle", /* 28 = COLOR_GRADIENTINACTIVECAPTION */
|
L"GradientInactiveTitle", /* 28 = COLOR_GRADIENTINACTIVECAPTION */
|
||||||
L"MenuHilight", /* 29 = COLOR_MENUHILIGHT */
|
L"MenuHilight", /* 29 = COLOR_MENUHILIGHT */
|
||||||
L"MenuBar" /* 30 = COLOR_MENUBAR */
|
L"MenuBar" /* 30 = COLOR_MENUBAR */
|
||||||
};
|
};
|
||||||
#define NUM_SYSCOLORS (sizeof(g_RegColorNames) / sizeof(g_RegColorNames[0]))
|
#define NUM_SYSCOLORS (sizeof(g_RegColorNames) / sizeof(g_RegColorNames[0]))
|
||||||
|
|
||||||
static
|
static
|
||||||
COLORREF StrToColorref(LPWSTR lpszCol)
|
COLORREF StrToColorref(
|
||||||
|
IN LPWSTR lpszCol)
|
||||||
{
|
{
|
||||||
BYTE rgb[3];
|
BYTE rgb[3];
|
||||||
|
|
||||||
rgb[0] = StrToIntW(lpszCol);
|
rgb[0] = StrToIntW(lpszCol);
|
||||||
lpszCol = StrChrW(lpszCol, L' ') + 1;
|
lpszCol = StrChrW(lpszCol, L' ') + 1;
|
||||||
rgb[1] = StrToIntW(lpszCol);
|
rgb[1] = StrToIntW(lpszCol);
|
||||||
lpszCol = StrChrW(lpszCol, L' ') + 1;
|
lpszCol = StrChrW(lpszCol, L' ') + 1;
|
||||||
rgb[2] = StrToIntW(lpszCol);
|
rgb[2] = StrToIntW(lpszCol);
|
||||||
return RGB(rgb[0], rgb[1], rgb[2]);
|
return RGB(rgb[0], rgb[1], rgb[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
void SetUserSysColors(void)
|
VOID SetUserSysColors(VOID)
|
||||||
{
|
{
|
||||||
HKEY hKey;
|
HKEY hKey;
|
||||||
INT i;
|
INT i;
|
||||||
WCHAR szColor[20];
|
WCHAR szColor[20];
|
||||||
DWORD Type, Size;
|
DWORD Type, Size;
|
||||||
COLORREF crColor;
|
COLORREF crColor;
|
||||||
|
|
||||||
if(!RegOpenKeyEx(HKEY_CURRENT_USER,
|
if (!RegOpenKeyEx(HKEY_CURRENT_USER, REGSTR_PATH_COLORS,
|
||||||
L"Control Panel\\Colors",
|
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
||||||
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for(i = 0; i < NUM_SYSCOLORS; i++)
|
|
||||||
{
|
|
||||||
Size = sizeof(szColor);
|
|
||||||
if(RegQueryValueEx(hKey, g_RegColorNames[i], NULL, &Type,
|
|
||||||
(LPBYTE)szColor, &Size) == ERROR_SUCCESS && Type == REG_SZ)
|
|
||||||
{
|
{
|
||||||
crColor = StrToColorref(szColor);
|
return;
|
||||||
SetSysColors(1, &i, &crColor);
|
|
||||||
}
|
}
|
||||||
}
|
for(i = 0; i < NUM_SYSCOLORS; i++)
|
||||||
RegCloseKey(hKey);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void LoadUserFontSetting(LPWSTR lpValueName, PLOGFONTW pFont)
|
|
||||||
{
|
|
||||||
HKEY hKey;
|
|
||||||
LOGFONTW lfTemp;
|
|
||||||
DWORD Type, Size;
|
|
||||||
INT error;
|
|
||||||
|
|
||||||
Size = sizeof(LOGFONTW);
|
|
||||||
if(!RegOpenKeyEx(HKEY_CURRENT_USER,
|
|
||||||
L"Control Panel\\Desktop\\WindowMetrics",
|
|
||||||
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
error = RegQueryValueEx(hKey, lpValueName, NULL, &Type, (LPBYTE)&lfTemp, &Size);
|
|
||||||
if ((error != ERROR_SUCCESS) || (Type != REG_BINARY))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
RegCloseKey(hKey);
|
|
||||||
/* FIXME: Check if lfTemp is a valid font */
|
|
||||||
*pFont = lfTemp;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void LoadUserMetricSetting(LPWSTR lpValueName, INT *pValue)
|
|
||||||
{
|
|
||||||
HKEY hKey;
|
|
||||||
DWORD Type, Size;
|
|
||||||
INT ret;
|
|
||||||
WCHAR strValue[8];
|
|
||||||
|
|
||||||
Size = sizeof(strValue);
|
|
||||||
if(!RegOpenKeyEx(HKEY_CURRENT_USER,
|
|
||||||
L"Control Panel\\Desktop\\WindowMetrics",
|
|
||||||
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ret = RegQueryValueEx(hKey, lpValueName, NULL, &Type, (LPBYTE)&strValue, &Size);
|
|
||||||
if ((ret != ERROR_SUCCESS) || (Type != REG_SZ))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
RegCloseKey(hKey);
|
|
||||||
*pValue = StrToInt(strValue);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void SetUserMetrics(void)
|
|
||||||
{
|
|
||||||
NONCLIENTMETRICSW ncmetrics;
|
|
||||||
MINIMIZEDMETRICS mmmetrics;
|
|
||||||
|
|
||||||
ncmetrics.cbSize = sizeof(NONCLIENTMETRICSW);
|
|
||||||
mmmetrics.cbSize = sizeof(MINIMIZEDMETRICS);
|
|
||||||
SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncmetrics, 0);
|
|
||||||
SystemParametersInfoW(SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &mmmetrics, 0);
|
|
||||||
|
|
||||||
LoadUserFontSetting(L"CaptionFont", &ncmetrics.lfCaptionFont);
|
|
||||||
LoadUserFontSetting(L"SmCaptionFont", &ncmetrics.lfSmCaptionFont);
|
|
||||||
LoadUserFontSetting(L"MenuFont", &ncmetrics.lfMenuFont);
|
|
||||||
LoadUserFontSetting(L"StatusFont", &ncmetrics.lfStatusFont);
|
|
||||||
LoadUserFontSetting(L"MessageFont", &ncmetrics.lfMessageFont);
|
|
||||||
/* FIXME: load icon font ? */
|
|
||||||
|
|
||||||
LoadUserMetricSetting(L"BorderWidth", &ncmetrics.iBorderWidth);
|
|
||||||
LoadUserMetricSetting(L"ScrollWidth", &ncmetrics.iScrollWidth);
|
|
||||||
LoadUserMetricSetting(L"ScrollHeight", &ncmetrics.iScrollHeight);
|
|
||||||
LoadUserMetricSetting(L"CaptionWidth", &ncmetrics.iCaptionWidth);
|
|
||||||
LoadUserMetricSetting(L"CaptionHeight", &ncmetrics.iCaptionHeight);
|
|
||||||
LoadUserMetricSetting(L"SmCaptionWidth", &ncmetrics.iSmCaptionWidth);
|
|
||||||
LoadUserMetricSetting(L"SmCaptionHeight", &ncmetrics.iSmCaptionHeight);
|
|
||||||
LoadUserMetricSetting(L"Menuwidth", &ncmetrics.iMenuWidth);
|
|
||||||
LoadUserMetricSetting(L"MenuHeight", &ncmetrics.iMenuHeight);
|
|
||||||
|
|
||||||
SystemParametersInfoW(SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncmetrics, 0);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void SetUserWallpaper(void)
|
|
||||||
{
|
|
||||||
HKEY hKey;
|
|
||||||
DWORD Type, Size;
|
|
||||||
WCHAR szWallpaper[MAX_PATH + 1];
|
|
||||||
|
|
||||||
if(RegOpenKeyEx(HKEY_CURRENT_USER,
|
|
||||||
REGSTR_PATH_DESKTOP,
|
|
||||||
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
Size = sizeof(szWallpaper);
|
|
||||||
if(RegQueryValueEx(hKey,
|
|
||||||
L"Wallpaper",
|
|
||||||
NULL,
|
|
||||||
&Type,
|
|
||||||
(LPBYTE)szWallpaper,
|
|
||||||
&Size) == ERROR_SUCCESS
|
|
||||||
&& Type == REG_SZ)
|
|
||||||
{
|
{
|
||||||
ExpandEnvironmentStrings(szWallpaper, szWallpaper, MAX_PATH);
|
Size = sizeof(szColor);
|
||||||
|
if (RegQueryValueEx(hKey, g_RegColorNames[i], NULL, &Type,
|
||||||
/* Load and change the wallpaper */
|
(LPBYTE)szColor, &Size) == ERROR_SUCCESS &&
|
||||||
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, szWallpaper, SPIF_SENDCHANGE);
|
Type == REG_SZ)
|
||||||
}
|
{
|
||||||
else
|
crColor = StrToColorref(szColor);
|
||||||
{
|
SetSysColors(1, &i, &crColor);
|
||||||
/* remove the wallpaper */
|
}
|
||||||
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL, SPIF_SENDCHANGE);
|
|
||||||
}
|
}
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
}
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
void SetUserSettings(void)
|
VOID LoadUserFontSetting(
|
||||||
|
IN LPWSTR lpValueName,
|
||||||
|
OUT PLOGFONTW pFont)
|
||||||
{
|
{
|
||||||
SetUserSysColors();
|
HKEY hKey;
|
||||||
SetUserMetrics();
|
LOGFONTW lfTemp;
|
||||||
SetUserWallpaper();
|
DWORD Type, Size;
|
||||||
|
INT error;
|
||||||
|
|
||||||
|
Size = sizeof(LOGFONTW);
|
||||||
|
if (!RegOpenKeyEx(HKEY_CURRENT_USER, REGSTR_PATH_METRICS,
|
||||||
|
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
error = RegQueryValueEx(hKey, lpValueName, NULL, &Type, (LPBYTE)&lfTemp, &Size);
|
||||||
|
if ((error != ERROR_SUCCESS) || (Type != REG_BINARY))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
/* FIXME: Check if lfTemp is a valid font */
|
||||||
|
*pFont = lfTemp;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID LoadUserMetricSetting(
|
||||||
|
IN LPWSTR lpValueName,
|
||||||
|
OUT INT *pValue)
|
||||||
|
{
|
||||||
|
HKEY hKey;
|
||||||
|
DWORD Type, Size;
|
||||||
|
INT ret;
|
||||||
|
WCHAR strValue[8];
|
||||||
|
|
||||||
|
Size = sizeof(strValue);
|
||||||
|
if (!RegOpenKeyEx(HKEY_CURRENT_USER, REGSTR_PATH_METRICS,
|
||||||
|
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ret = RegQueryValueEx(hKey, lpValueName, NULL, &Type, (LPBYTE)&strValue, &Size);
|
||||||
|
if ((ret != ERROR_SUCCESS) || (Type != REG_SZ))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
*pValue = StrToInt(strValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID SetUserMetrics(VOID)
|
||||||
|
{
|
||||||
|
NONCLIENTMETRICSW ncmetrics;
|
||||||
|
MINIMIZEDMETRICS mmmetrics;
|
||||||
|
|
||||||
|
ncmetrics.cbSize = sizeof(NONCLIENTMETRICSW);
|
||||||
|
mmmetrics.cbSize = sizeof(MINIMIZEDMETRICS);
|
||||||
|
SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncmetrics, 0);
|
||||||
|
SystemParametersInfoW(SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &mmmetrics, 0);
|
||||||
|
|
||||||
|
LoadUserFontSetting(L"CaptionFont", &ncmetrics.lfCaptionFont);
|
||||||
|
LoadUserFontSetting(L"SmCaptionFont", &ncmetrics.lfSmCaptionFont);
|
||||||
|
LoadUserFontSetting(L"MenuFont", &ncmetrics.lfMenuFont);
|
||||||
|
LoadUserFontSetting(L"StatusFont", &ncmetrics.lfStatusFont);
|
||||||
|
LoadUserFontSetting(L"MessageFont", &ncmetrics.lfMessageFont);
|
||||||
|
/* FIXME: load icon font ? */
|
||||||
|
|
||||||
|
LoadUserMetricSetting(L"BorderWidth", &ncmetrics.iBorderWidth);
|
||||||
|
LoadUserMetricSetting(L"ScrollWidth", &ncmetrics.iScrollWidth);
|
||||||
|
LoadUserMetricSetting(L"ScrollHeight", &ncmetrics.iScrollHeight);
|
||||||
|
LoadUserMetricSetting(L"CaptionWidth", &ncmetrics.iCaptionWidth);
|
||||||
|
LoadUserMetricSetting(L"CaptionHeight", &ncmetrics.iCaptionHeight);
|
||||||
|
LoadUserMetricSetting(L"SmCaptionWidth", &ncmetrics.iSmCaptionWidth);
|
||||||
|
LoadUserMetricSetting(L"SmCaptionHeight", &ncmetrics.iSmCaptionHeight);
|
||||||
|
LoadUserMetricSetting(L"Menuwidth", &ncmetrics.iMenuWidth);
|
||||||
|
LoadUserMetricSetting(L"MenuHeight", &ncmetrics.iMenuHeight);
|
||||||
|
|
||||||
|
SystemParametersInfoW(SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncmetrics, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID SetUserWallpaper(VOID)
|
||||||
|
{
|
||||||
|
HKEY hKey;
|
||||||
|
DWORD Type, Size;
|
||||||
|
WCHAR szWallpaper[MAX_PATH + 1];
|
||||||
|
|
||||||
|
if (RegOpenKeyEx(HKEY_CURRENT_USER, REGSTR_PATH_DESKTOP,
|
||||||
|
0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
Size = sizeof(szWallpaper);
|
||||||
|
if (RegQueryValueEx(hKey,
|
||||||
|
L"Wallpaper",
|
||||||
|
NULL,
|
||||||
|
&Type,
|
||||||
|
(LPBYTE)szWallpaper,
|
||||||
|
&Size) == ERROR_SUCCESS &&
|
||||||
|
Type == REG_SZ)
|
||||||
|
{
|
||||||
|
ExpandEnvironmentStrings(szWallpaper, szWallpaper, MAX_PATH);
|
||||||
|
|
||||||
|
/* Load and change the wallpaper */
|
||||||
|
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, szWallpaper, SPIF_SENDCHANGE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* remove the wallpaper */
|
||||||
|
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL, SPIF_SENDCHANGE);
|
||||||
|
}
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
VOID SetUserSettings(VOID)
|
||||||
|
{
|
||||||
|
SetUserSysColors();
|
||||||
|
SetUserMetrics();
|
||||||
|
SetUserWallpaper();
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef DWORD (WINAPI *PCMP_REPORT_LOGON)(DWORD, DWORD);
|
typedef DWORD (WINAPI *PCMP_REPORT_LOGON)(DWORD, DWORD);
|
||||||
|
@ -475,22 +481,20 @@ NotifyLogon(VOID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning(disable : 4100)
|
#pragma warning(disable : 4100)
|
||||||
#endif /* _MSC_VER */
|
#endif /* _MSC_VER */
|
||||||
|
|
||||||
int WINAPI
|
int WINAPI
|
||||||
WinMain(HINSTANCE hInst,
|
WinMain(IN HINSTANCE hInst,
|
||||||
HINSTANCE hPrevInstance,
|
IN HINSTANCE hPrevInstance,
|
||||||
LPSTR lpszCmdLine,
|
IN LPSTR lpszCmdLine,
|
||||||
int nCmdShow)
|
IN int nCmdShow)
|
||||||
{
|
{
|
||||||
NotifyLogon();
|
NotifyLogon();
|
||||||
SetUserSettings();
|
SetUserSettings();
|
||||||
StartShell();
|
StartShell();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Reference in a new issue