[FORMATTING] Fix indentation

svn path=/trunk/; revision=31653
This commit is contained in:
Hervé Poussineau 2008-01-07 20:55:02 +00:00
parent b195ebe655
commit cd933bb16c

View file

@ -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 */