422 lines
13 KiB
C++
422 lines
13 KiB
C++
//+--------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1994 - 1996.
|
|
//
|
|
// File: wizsel.cxx
|
|
//
|
|
// Contents: Task schedule credentials selection property page implementation.
|
|
//
|
|
// Classes: CCredentialsPage
|
|
//
|
|
// History: 05-22-1998 SusiA
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
#include "precomp.h"
|
|
|
|
// temporariy define new mstask flag in case hasn't
|
|
// propogated to sdk\inc
|
|
//for CS help
|
|
|
|
#ifdef _CREDENTIALS
|
|
|
|
extern TCHAR szSyncMgrHelp[];
|
|
extern ULONG g_aContextHelpIds[];
|
|
|
|
extern DWORD g_dwPlatformId;
|
|
|
|
CCredentialsPage *g_pCredentialsPage = NULL;
|
|
|
|
//+-------------------------------------------------------------------------------
|
|
// FUNCTION: SchedWizardCredentialsDlgProc(HWND, UINT, WPARAM, LPARAM)
|
|
//
|
|
// PURPOSE: Callback dialog procedure for the property page
|
|
//
|
|
// PARAMETERS:
|
|
// hDlg - Dialog box window handle
|
|
// uMessage - current message
|
|
// wParam - depends on message
|
|
// lParam - depends on message
|
|
//
|
|
// RETURN VALUE:
|
|
//
|
|
// Depends on message. In general, return TRUE if we process it.
|
|
//
|
|
// COMMENTS:
|
|
//
|
|
//--------------------------------------------------------------------------------
|
|
BOOL CALLBACK SchedWizardCredentialsDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
WORD wNotifyCode = HIWORD(wParam); // notification code
|
|
|
|
switch (uMessage)
|
|
{
|
|
case WM_INITDIALOG:
|
|
|
|
if (g_pCredentialsPage)
|
|
g_pCredentialsPage->Initialize(hDlg);
|
|
|
|
InitPage(hDlg,lParam);
|
|
break;
|
|
|
|
case WM_HELP:
|
|
{
|
|
LPHELPINFO lphi = (LPHELPINFO)lParam;
|
|
|
|
if (lphi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
WinHelp ( (HWND) lphi->hItemHandle,
|
|
szSyncMgrHelp,
|
|
HELP_WM_HELP,
|
|
(ULONG_PTR) g_aContextHelpIds);
|
|
}
|
|
return TRUE;
|
|
}
|
|
case WM_CONTEXTMENU:
|
|
{
|
|
WinHelp ((HWND)wParam,
|
|
szSyncMgrHelp,
|
|
HELP_CONTEXTMENU,
|
|
(ULONG_PTR)g_aContextHelpIds);
|
|
|
|
return TRUE;
|
|
}
|
|
case WM_PAINT:
|
|
WmPaint(hDlg, uMessage, wParam, lParam);
|
|
break;
|
|
|
|
case WM_PALETTECHANGED:
|
|
WmPaletteChanged(hDlg, wParam);
|
|
break;
|
|
|
|
case WM_QUERYNEWPALETTE:
|
|
return( WmQueryNewPalette(hDlg) );
|
|
break;
|
|
|
|
case WM_ACTIVATE:
|
|
return( WmActivate(hDlg, wParam, lParam) );
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDC_USERNAME:
|
|
case IDC_PASSWORD:
|
|
case IDC_CONFIRMPASSWORD:
|
|
{
|
|
if (wNotifyCode == EN_CHANGE)
|
|
{
|
|
PropSheet_Changed(GetParent(hDlg), hDlg);
|
|
g_pCredentialsPage->SetDirty();
|
|
}
|
|
}
|
|
break;
|
|
|
|
case IDC_RUNLOGGEDON:
|
|
{
|
|
if (wNotifyCode == BN_CLICKED)
|
|
{
|
|
PropSheet_Changed(GetParent(hDlg), hDlg);
|
|
g_pCredentialsPage->SetDirty();
|
|
g_pCredentialsPage->SetEnabled(FALSE);
|
|
|
|
}
|
|
}
|
|
break;
|
|
case IDC_RUNALWAYS:
|
|
{
|
|
if (wNotifyCode == BN_CLICKED)
|
|
{
|
|
PropSheet_Changed(GetParent(hDlg), hDlg);
|
|
g_pCredentialsPage->SetDirty();
|
|
g_pCredentialsPage->SetEnabled(TRUE);
|
|
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CCredentialsPage::CCredentialsPage
|
|
//
|
|
// Synopsis: ctor
|
|
//
|
|
// [phPSP] - filled with prop page handle
|
|
//
|
|
// History: 11-21-1997 SusiA
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
CCredentialsPage::CCredentialsPage(
|
|
HINSTANCE hinst,
|
|
BOOL *pfSaved,
|
|
ISyncSchedule *pISyncSched,
|
|
HPROPSHEETPAGE *phPSP)
|
|
{
|
|
ZeroMemory(&m_psp, sizeof(PROPSHEETPAGE));
|
|
|
|
m_psp.dwSize = sizeof (PROPSHEETPAGE);
|
|
m_psp.dwFlags = PSP_DEFAULT;
|
|
m_psp.hInstance = hinst;
|
|
m_psp.pszTemplate = MAKEINTRESOURCE(IDD_SCHEDPAGE_CREDENTIALS);
|
|
m_psp.pszIcon = NULL;
|
|
m_psp.pfnDlgProc = (DLGPROC) SchedWizardCredentialsDlgProc;
|
|
m_psp.lParam = 0;
|
|
|
|
g_pCredentialsPage = this;
|
|
m_pISyncSched = pISyncSched;
|
|
m_pISyncSched->AddRef();
|
|
|
|
m_pfSaved = pfSaved;
|
|
*m_pfSaved = FALSE;
|
|
|
|
m_fTaskAccountChange = FALSE;
|
|
|
|
#ifdef WIZARD97
|
|
m_psp.dwFlags |= PSP_HIDEHEADER;
|
|
#endif // WIZARD97
|
|
|
|
*phPSP = CreatePropertySheetPage(&m_psp);
|
|
|
|
|
|
}
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CCredentialsPage::Initialize(HWND hwnd)
|
|
//
|
|
// Synopsis: initialize the credentials page
|
|
//
|
|
// History: 05-22-1998 SusiA
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
BOOL CCredentialsPage::Initialize(HWND hwnd)
|
|
{
|
|
m_hwnd = hwnd;
|
|
|
|
ShowUserName();
|
|
|
|
//Set the default IDC_ONLY_WHEN_LOGGED_ON check state.
|
|
ITask *pITask;
|
|
m_pISyncSched->GetITask(&pITask);
|
|
DWORD dwFlags;
|
|
pITask->GetFlags(&dwFlags);
|
|
|
|
BOOL fOnlyWhenLoggedOn = dwFlags & TASK_FLAG_RUN_ONLY_IF_LOGGED_ON;
|
|
|
|
Button_SetCheck(GetDlgItem(m_hwnd,IDC_RUNLOGGEDON), fOnlyWhenLoggedOn);
|
|
Button_SetCheck(GetDlgItem(m_hwnd,IDC_RUNALWAYS), !fOnlyWhenLoggedOn);
|
|
Edit_LimitText(GetDlgItem(m_hwnd, IDC_PASSWORD), PWLEN);
|
|
Edit_LimitText(GetDlgItem(m_hwnd, IDC_CONFIRMPASSWORD), PWLEN);
|
|
Edit_LimitText(GetDlgItem(m_hwnd, IDC_USERNAME), MAX_DOMANDANDMACHINENAMESIZE -1);
|
|
|
|
SetEnabled(!fOnlyWhenLoggedOn);
|
|
pITask->Release();
|
|
|
|
|
|
ShowWindow(m_hwnd, /* nCmdShow */ SW_SHOWNORMAL );
|
|
UpdateWindow(m_hwnd);
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
//
|
|
// FUNCTION: CCredentialsPage::SetDirty()
|
|
//
|
|
// PURPOSE: we have changed the account info
|
|
//
|
|
// COMMENTS: Only called frm prop sheet; not wizard
|
|
//
|
|
//--------------------------------------------------------------------------------
|
|
void CCredentialsPage::SetDirty()
|
|
{
|
|
m_fTaskAccountChange = TRUE;
|
|
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
//
|
|
// FUNCTION: CSelectItemsPage::ShowUserName()
|
|
//
|
|
// PURPOSE: change the task's user name
|
|
//
|
|
// COMMENTS: Only called frm prop sheet; not wizard
|
|
//
|
|
//--------------------------------------------------------------------------------
|
|
BOOL CCredentialsPage::ShowUserName()
|
|
{
|
|
|
|
Assert(m_pISyncSched);
|
|
|
|
WCHAR wszUserName[MAX_PATH + 1];
|
|
DWORD dwSize = MAX_PATH;
|
|
|
|
HWND hwndEdit = GetDlgItem(m_hwnd, IDC_USERNAME);
|
|
|
|
HRESULT hr = m_pISyncSched->GetAccountInformation(&dwSize, wszUserName);
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
*wszUserName = L'\0';
|
|
}
|
|
|
|
Edit_SetText(hwndEdit, wszUserName);
|
|
|
|
//
|
|
// Need to set m_fTaskAccountChange here since doing a Edit_SetText causes
|
|
// a WM_COMMAND msg with EN_CHANGE to be called for edit boxes.
|
|
//
|
|
m_fTaskAccountChange = FALSE;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------
|
|
//
|
|
// FUNCTION: CSelectItemsPage::CommitChanges()
|
|
//
|
|
// PURPOSE: Write all the current Schedule Settings to the registry
|
|
//
|
|
// COMMENTS: Implemented on main thread.
|
|
//
|
|
//--------------------------------------------------------------------------------
|
|
HRESULT CCredentialsPage::CommitChanges()
|
|
{
|
|
HRESULT hr = S_OK;
|
|
BOOL fAccountChanged = TRUE;
|
|
|
|
if (m_fTaskAccountChange)
|
|
{
|
|
BOOL fRunAlways = Button_GetCheck(GetDlgItem(m_hwnd,IDC_RUNALWAYS));
|
|
|
|
|
|
if (fRunAlways)
|
|
{
|
|
Assert(m_pISyncSched);
|
|
WCHAR wcUserBuffMAX_DOMANDANDMACHINENAMESIZE];
|
|
WCHAR wcPassword[PWLEN + 1];
|
|
WCHAR wcConfirmPassword[PWLEN + 1];
|
|
|
|
GetDlgItemText(m_hwnd,IDC_USERNAME,wcUserBuff,MAX_DOMANDANDMACHINENAMESIZE);
|
|
GetDlgItemText(m_hwnd,IDC_PASSWORD,wcPassword, PWLEN);
|
|
GetDlgItemText(m_hwnd,IDC_CONFIRMPASSWORD,wcConfirmPassword, PWLEN);
|
|
|
|
|
|
if (wcscmp(wcPassword, wcConfirmPassword) != 0)
|
|
{
|
|
// we return this to signal the controlling page not to
|
|
// dismiss the dialog.
|
|
return(ERROR_INVALID_PASSWORD);
|
|
}
|
|
|
|
|
|
ITask *pITask;
|
|
if (FAILED(hr = m_pISyncSched->GetITask(&pITask)))
|
|
{
|
|
return hr;
|
|
}
|
|
|
|
if (FAILED (hr = m_pISyncSched->SetAccountInformation(wcUserBuff,
|
|
wcPassword)))
|
|
{
|
|
AssertSz(0,"ISyncSched->SetAccountInformation failed");
|
|
return hr;
|
|
}
|
|
|
|
DWORD dwFlags;
|
|
pITask->GetFlags(&dwFlags);
|
|
|
|
if (FAILED(hr = pITask->SetFlags(dwFlags & (~TASK_FLAG_RUN_ONLY_IF_LOGGED_ON))))
|
|
{
|
|
AssertSz(0,"ITask->SetFlags failed");
|
|
return hr;
|
|
}
|
|
pITask->Release();
|
|
|
|
}
|
|
else
|
|
{
|
|
ITask *pITask;
|
|
if (FAILED(hr = m_pISyncSched->GetITask(&pITask)))
|
|
{
|
|
return hr;
|
|
}
|
|
|
|
WCHAR wszDomainAndUser[MAX_DOMANDANDMACHINENAMESIZE];
|
|
|
|
GetDefaultDomainAndUserName(wszDomainAndUser,TEXT("\\"),MAX_DOMANDANDMACHINENAMESIZE);
|
|
|
|
if (FAILED(hr = m_pISyncSched->SetAccountInformation(wszDomainAndUser, NULL)))
|
|
{
|
|
AssertSz(0,"ISyncSched->SetAccountInformation failed");
|
|
return hr;
|
|
}
|
|
|
|
DWORD dwFlags;
|
|
pITask->GetFlags(&dwFlags);
|
|
|
|
if (FAILED(hr = pITask->SetFlags(dwFlags | TASK_FLAG_RUN_ONLY_IF_LOGGED_ON)))
|
|
{
|
|
AssertSz(0,"ITask->SetFlags failed");
|
|
return hr;
|
|
}
|
|
pITask->Release();
|
|
|
|
}
|
|
//Now save the schedule
|
|
//NoteNote: optimize by moving the save from wizsel and cred to EditSyncSched
|
|
hr = m_pISyncSched->Save();
|
|
if (hr == S_OK)
|
|
{
|
|
*m_pfSaved = TRUE;
|
|
}
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
|
|
//+-------------------------------------------------------------------------------
|
|
//
|
|
// FUNCTION: BOOL CSelectItemsPage::SetEnabled(BOOL fEnabled)
|
|
//
|
|
// PURPOSE: set the fields enabled according to the RB choice
|
|
//
|
|
// RETURN VALUE: return TRUE if we process it ok.
|
|
//
|
|
//+-------------------------------------------------------------------------------
|
|
BOOL CCredentialsPage::SetEnabled(BOOL fEnabled)
|
|
{
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_USERNAME), fEnabled);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_PASSWORD), fEnabled);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_CONFIRMPASSWORD), fEnabled);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_RUNAS_TEXT), fEnabled);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_PASSWORD_TEXT), fEnabled);
|
|
EnableWindow(GetDlgItem(m_hwnd, IDC_CONFIRMPASSWORD_TEXT), fEnabled);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
#endif // #ifdef _CREDENTIALS
|