175 lines
4.5 KiB
C++
175 lines
4.5 KiB
C++
|
//Copyright (c) 1997-2000 Microsoft Corporation
|
||
|
#include "pch.hxx" // pch
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#include "resource.h"
|
||
|
#include "pgSveDef.h"
|
||
|
|
||
|
|
||
|
// JMC: This is taken from access.cpl
|
||
|
|
||
|
/***********************************************************************/
|
||
|
// CopyKey( hKey, hKeyDst, name )
|
||
|
// create the destination key
|
||
|
// for each value
|
||
|
// CopyValue
|
||
|
// for each subkey
|
||
|
// CopyKey
|
||
|
|
||
|
DWORD CopyKey( HKEY hkeySrc, HKEY hkeyDst, LPSTR szKey )
|
||
|
{
|
||
|
HKEY hkeyOld = NULL, hkeyNew = NULL;
|
||
|
char szValue[128];
|
||
|
BYTE szData[128];
|
||
|
char szBuffer[128];
|
||
|
DWORD iStatus;
|
||
|
UINT nValue, nKey;
|
||
|
DWORD iValueLen, iDataLen;
|
||
|
DWORD dwType;
|
||
|
|
||
|
iStatus = RegOpenKeyA( hkeySrc, szKey, &hkeyOld );
|
||
|
if( iStatus != ERROR_SUCCESS)
|
||
|
goto exit;
|
||
|
|
||
|
iStatus = RegOpenKeyA( hkeyDst, szKey, &hkeyNew );
|
||
|
if( iStatus != ERROR_SUCCESS )
|
||
|
{
|
||
|
iStatus = RegCreateKeyA( hkeyDst, szKey, &hkeyNew );
|
||
|
if( iStatus != ERROR_SUCCESS )
|
||
|
{
|
||
|
goto exit;
|
||
|
}
|
||
|
}
|
||
|
//*********** copy the values **************** //
|
||
|
|
||
|
for( nValue = 0, iValueLen=sizeof szValue, iDataLen=sizeof szValue;
|
||
|
ERROR_SUCCESS == (iStatus = RegEnumValueA(hkeyOld,
|
||
|
nValue,
|
||
|
szValue,
|
||
|
&iValueLen,
|
||
|
NULL, // reserved
|
||
|
&dwType, // don't need type
|
||
|
szData,
|
||
|
&iDataLen ) );
|
||
|
nValue ++, iValueLen=sizeof szValue, iDataLen=sizeof szValue )
|
||
|
{
|
||
|
iStatus = RegSetValueExA( hkeyNew,
|
||
|
szValue,
|
||
|
0, // reserved
|
||
|
dwType,
|
||
|
szData,
|
||
|
iDataLen);
|
||
|
}
|
||
|
if( iStatus != ERROR_NO_MORE_ITEMS )
|
||
|
{
|
||
|
goto exit;
|
||
|
}
|
||
|
|
||
|
//*********** copy the subtrees ************** //
|
||
|
|
||
|
for( nKey = 0;
|
||
|
ERROR_SUCCESS == (iStatus = RegEnumKeyA(hkeyOld,nKey,szBuffer,sizeof(szBuffer)));
|
||
|
nKey ++ )
|
||
|
{
|
||
|
iStatus = CopyKey( hkeyOld, hkeyNew, szBuffer );
|
||
|
if( iStatus != ERROR_NO_MORE_ITEMS && iStatus != ERROR_SUCCESS )
|
||
|
{
|
||
|
goto exit;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if( iStatus == ERROR_NO_MORE_ITEMS )
|
||
|
iStatus = ERROR_SUCCESS;
|
||
|
|
||
|
exit:
|
||
|
if (hkeyOld)
|
||
|
RegCloseKey(hkeyOld);
|
||
|
if (hkeyNew)
|
||
|
RegCloseKey(hkeyNew);
|
||
|
|
||
|
return iStatus;
|
||
|
}
|
||
|
|
||
|
DWORD SaveLookToDefaultUser( void )
|
||
|
{
|
||
|
DWORD iStatus;
|
||
|
HKEY hkeyDst;
|
||
|
|
||
|
iStatus = RegOpenKeyA( HKEY_USERS, ".DEFAULT", &hkeyDst );
|
||
|
if( iStatus != ERROR_SUCCESS )
|
||
|
return iStatus;
|
||
|
iStatus = CopyKey( HKEY_CURRENT_USER, hkeyDst, "Control Panel\\Desktop");
|
||
|
iStatus = CopyKey( HKEY_CURRENT_USER, hkeyDst, "Control Panel\\Colors");
|
||
|
RegCloseKey( hkeyDst );
|
||
|
return iStatus;
|
||
|
}
|
||
|
|
||
|
DWORD SaveAccessibilityToDefaultUser( void )
|
||
|
{
|
||
|
DWORD iStatus;
|
||
|
HKEY hkeyDst;
|
||
|
|
||
|
iStatus = RegOpenKeyA( HKEY_USERS, ".DEFAULT", &hkeyDst );
|
||
|
if( iStatus != ERROR_SUCCESS )
|
||
|
return iStatus;
|
||
|
iStatus = CopyKey( HKEY_CURRENT_USER, hkeyDst, "Control Panel\\Accessibility");
|
||
|
RegCloseKey( hkeyDst );
|
||
|
return iStatus;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
CSaveForDefaultUserPg::CSaveForDefaultUserPg(
|
||
|
LPPROPSHEETPAGE ppsp
|
||
|
) : WizardPage(ppsp, IDS_WIZSAVEASDEFAULTTITLE, IDS_WIZSAVEASDEFAULTSUBTITLE)
|
||
|
{
|
||
|
m_dwPageId = IDD_WIZWORKSTATIONDEFAULT;
|
||
|
ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId);
|
||
|
}
|
||
|
|
||
|
|
||
|
CSaveForDefaultUserPg::~CSaveForDefaultUserPg(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
LRESULT CSaveForDefaultUserPg::OnPSN_WizNext(HWND hwnd, INT idCtl, LPPSHNOTIFY pnmh)
|
||
|
{
|
||
|
if(Button_GetCheck(GetDlgItem(m_hwnd, IDC_CHECKSAVESETTINGTODEFAULT)))
|
||
|
{
|
||
|
SaveAccessibilityToDefaultUser();
|
||
|
// JMC Check for admin privleges for both callse
|
||
|
if(ERROR_SUCCESS != SaveLookToDefaultUser())
|
||
|
StringTableMessageBox(m_hwnd, IDS_WIZERRORNEEDADMINTEXT, IDS_WIZERRORNEEDADMINTITLE, MB_OK);
|
||
|
}
|
||
|
return WizardPage::OnPSN_WizNext(hwnd, idCtl, pnmh);
|
||
|
}
|
||
|
|
||
|
LRESULT
|
||
|
CSaveForDefaultUserPg::OnCommand(
|
||
|
HWND hwnd,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam
|
||
|
)
|
||
|
{
|
||
|
LRESULT lResult = 1;
|
||
|
|
||
|
WORD wNotifyCode = HIWORD(wParam);
|
||
|
WORD wCtlID = LOWORD(wParam);
|
||
|
HWND hwndCtl = (HWND)lParam;
|
||
|
|
||
|
return lResult;
|
||
|
}
|
||
|
|
||
|
LRESULT
|
||
|
CSaveForDefaultUserPg::OnInitDialog(
|
||
|
HWND hwnd,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam
|
||
|
)
|
||
|
{
|
||
|
Button_SetCheck(GetDlgItem(m_hwnd, IDC_RADIO2), TRUE);
|
||
|
return 1;
|
||
|
}
|