windows-nt/Source/XPSP1/NT/windows/appcompat/tools/shimviewer/misc.cpp

232 lines
4.8 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 2001 Microsoft Corporation
Module Name:
Misc.cpp
Abstract:
Implements misc. functionality
Notes:
Unicode only
History:
05/04/2001 rparsons Created
--*/
#include "precomp.h"
extern APPINFO g_ai;
/*++
Routine Description:
Retrieves or sets position info
in the registry
Arguments:
fSave - If true, indicates we're saving data
*lppt - A POINT structure that contains/receives our data
Return Value:
TRUE on success, FALSE otherwise
--*/
void
GetSavePositionInfo(
IN BOOL fSave,
IN OUT POINT *lppt
)
{
HKEY hKey;
DWORD cbSize = 0, dwDisposition = 0;
LONG lRetVal = 0;
char szKeyName[] = "DlgCoordinates";
//
// Initialize our coordinates in case there's no data there
//
if (!fSave) {
lppt->x = lppt->y = 0;
}
//
// Open the registry key (or create it if the first time being used)
//
lRetVal = RegCreateKeyEx(HKEY_CURRENT_USER,
L"Software\\Microsoft\\ShimViewer",
0,
0,
REG_OPTION_NON_VOLATILE,
KEY_QUERY_VALUE | KEY_SET_VALUE,
0,
&hKey,
&dwDisposition);
if (ERROR_SUCCESS != lRetVal) {
return;
}
//
// Save or retrieve our coordinates
//
if (fSave) {
RegSetValueEx(hKey,
L"DlgCoordinates",
0,
REG_BINARY,
(PBYTE)lppt,
sizeof(*lppt));
} else {
cbSize = sizeof(*lppt);
RegQueryValueEx(hKey,
L"DlgCoordinates",
0,
0,
(PBYTE)lppt,
&cbSize);
}
RegCloseKey(hKey);
return;
}
/*++
Routine Description:
Retrieves or sets setting info.
in the registry
Arguments:
fSave - If true, indicates we're saving data
Return Value:
TRUE on success, FALSE otherwise
--*/
void
GetSaveSettings(
IN BOOL fSave
)
{
HKEY hKey;
LONG lRetVal = 0;
DWORD dwOnTop = 0, dwMinimize = 0, dwMonitor = 1;
DWORD dwDisposition = 0, cbSize = 0;
//
// Open the registry key (or create it if the first time being used)
//
lRetVal = RegCreateKeyEx(HKEY_CURRENT_USER,
L"Software\\Microsoft\\ShimViewer",
0,
0,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
0,
&hKey,
&dwDisposition);
if (ERROR_SUCCESS != lRetVal) {
return;
}
if (fSave) {
if (g_ai.fOnTop) {
dwOnTop |= 1;
}
if (g_ai.fMinimize) {
dwMinimize |= 1;
}
if (g_ai.fMonitor) {
dwMonitor |= 1;
}
lRetVal = RegSetValueEx(hKey,
L"AlwaysOnTop",
0,
REG_DWORD,
(LPBYTE)&dwOnTop,
sizeof(DWORD));
RegSetValueEx(hKey,
L"StartMinimize",
0,
REG_DWORD,
(LPBYTE)&dwMinimize,
sizeof(DWORD));
RegSetValueEx(hKey,
L"MonitorMessages",
0,
REG_DWORD,
(LPBYTE)&dwMonitor,
sizeof(DWORD));
} else {
cbSize = sizeof(DWORD);
RegQueryValueEx(hKey,
L"AlwaysOnTop",
0,
0,
(PBYTE)&dwOnTop,
&cbSize);
cbSize = sizeof(DWORD);
RegQueryValueEx(hKey,
L"StartMinimize",
0,
0,
(PBYTE)&dwMinimize,
&cbSize);
cbSize = sizeof(DWORD);
lRetVal = RegQueryValueEx(hKey,
L"MonitorMessages",
0,
0,
(PBYTE)&dwMonitor,
&cbSize);
if (dwOnTop) {
g_ai.fOnTop = TRUE;
}
if (dwMinimize) {
g_ai.fMinimize = TRUE;
}
if ((dwMonitor) || (ERROR_SUCCESS != lRetVal)) {
g_ai.fMonitor = TRUE;
}
}
RegCloseKey(hKey);
return;
}