Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

535 lines
16 KiB

//
// Copyright 1995-2002 by Microsoft Corporation
//
#include "precomp.h"
#include "userdlgs.h"
//***********************************************************************************
//CUsrDialog class
//base class for simple dialogs
//***********************************************************************************
INT_PTR CUsrDialog::DoDialog(HWND hwndParent)
{
return DialogBoxParam(
g_hInstance,
MAKEINTRESOURCE(m_wDlgID),
hwndParent,
DlgProc,
(LPARAM) this);
}
//
//
//
INT_PTR CALLBACK CUsrDialog::DlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
CUsrDialog * thisdlg = (CUsrDialog *) GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
switch(uMsg)
{
case WM_INITDIALOG:
SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam);
thisdlg = (CUsrDialog *) lParam;
thisdlg->OnInitDialog(hwndDlg);
return FALSE; // don't set focus.
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
thisdlg->OnOk(hwndDlg);
EndDialog(hwndDlg, IDOK);
return TRUE;
}
else if (LOWORD(wParam) == IDCANCEL)
{
EndDialog(hwndDlg, IDCANCEL);
return TRUE;
}
else
{
thisdlg->OnCommand(hwndDlg,HIWORD(wParam), LOWORD(wParam));
}
break;
}
return FALSE;
}
//***********************************************************************************
//CShadowStartDlg class
//Remote Control dialog
//***********************************************************************************
const int KBDSHIFT = 0x01;
const int KBDCTRL = 0x02;
const int KBDALT = 0x04;
struct {
LPCTSTR String;
DWORD VKCode;
} HotkeyLookupTable[] =
{
TEXT("0"), '0',
TEXT("1"), '1',
TEXT("2"), '2',
TEXT("3"), '3',
TEXT("4"), '4',
TEXT("5"), '5',
TEXT("6"), '6',
TEXT("7"), '7',
TEXT("8"), '8',
TEXT("9"), '9',
TEXT("A"), 'A',
TEXT("B"), 'B',
TEXT("C"), 'C',
TEXT("D"), 'D',
TEXT("E"), 'E',
TEXT("F"), 'F',
TEXT("G"), 'G',
TEXT("H"), 'H',
TEXT("I"), 'I',
TEXT("J"), 'J',
TEXT("K"), 'K',
TEXT("L"), 'L',
TEXT("M"), 'M',
TEXT("N"), 'N',
TEXT("O"), 'O',
TEXT("P"), 'P',
TEXT("Q"), 'Q',
TEXT("R"), 'R',
TEXT("S"), 'S',
TEXT("T"), 'T',
TEXT("U"), 'U',
TEXT("V"), 'V',
TEXT("W"), 'W',
TEXT("X"), 'X',
TEXT("Y"), 'Y',
TEXT("Z"), 'Z',
TEXT("{backspace}"), VK_BACK,
TEXT("{delete}"), VK_DELETE,
TEXT("{down}"), VK_DOWN,
TEXT("{end}"), VK_END,
TEXT("{enter}"), VK_RETURN,
/// TEXT("{esc}"), VK_ESCAPE, // KLB 07-16-95
/// TEXT("{F1}"), VK_F1,
TEXT("{F2}"), VK_F2,
TEXT("{F3}"), VK_F3,
TEXT("{F4}"), VK_F4,
TEXT("{F5}"), VK_F5,
TEXT("{F6}"), VK_F6,
TEXT("{F7}"), VK_F7,
TEXT("{F8}"), VK_F8,
TEXT("{F9}"), VK_F9,
TEXT("{F10}"), VK_F10,
TEXT("{F11}"), VK_F11,
TEXT("{F12}"), VK_F12,
TEXT("{home}"), VK_HOME,
TEXT("{insert}"), VK_INSERT,
TEXT("{left}"), VK_LEFT,
TEXT("{-}"), VK_SUBTRACT,
TEXT("{pagedown}"), VK_NEXT,
TEXT("{pageup}"), VK_PRIOR,
TEXT("{+}"), VK_ADD,
TEXT("{prtscrn}"), VK_SNAPSHOT,
TEXT("{right}"), VK_RIGHT,
TEXT("{spacebar}"), VK_SPACE,
TEXT("{*}"), VK_MULTIPLY,
TEXT("{tab}"), VK_TAB,
TEXT("{up}"), VK_UP,
NULL, NULL
};
LPCTSTR CShadowStartDlg::m_szShadowHotkeyKey = TEXT("ShadowHotkeyKey");
LPCTSTR CShadowStartDlg::m_szShadowHotkeyShift = TEXT("ShadowHotkeyShift");
//
//
//
CShadowStartDlg::CShadowStartDlg()
{
m_wDlgID = IDD_SHADOWSTART;
//set default values
m_ShadowHotkeyKey = VK_MULTIPLY;
m_ShadowHotkeyShift = KBDCTRL;
//get las saved values from the registry
HKEY hKey;
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, szTaskmanKey, 0, KEY_READ, &hKey))
{
DWORD dwTmp;
DWORD dwType;
DWORD dwSize = sizeof(DWORD);
if ( ERROR_SUCCESS == RegQueryValueEx(hKey, m_szShadowHotkeyKey, 0, &dwType, (LPBYTE) &dwTmp, &dwSize)
&& dwType == REG_DWORD
)
{
m_ShadowHotkeyKey = dwTmp;
}
dwSize = sizeof(DWORD);
if ( ERROR_SUCCESS == RegQueryValueEx(hKey, m_szShadowHotkeyShift, 0, &dwType, (LPBYTE) &dwTmp, &dwSize)
&& dwType == REG_DWORD
)
{
m_ShadowHotkeyShift = dwTmp;
}
RegCloseKey(hKey);
}
}
//
//
//
CShadowStartDlg::~CShadowStartDlg()
{
//save values into the registry
HKEY hKey;
if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_CURRENT_USER, szTaskmanKey, 0, TEXT("REG_BINARY"),
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL,
&hKey, NULL))
{
DWORD dwType = REG_DWORD;
DWORD dwSize = sizeof(DWORD);
RegSetValueEx(hKey, m_szShadowHotkeyKey, 0,
dwType, (LPBYTE) &m_ShadowHotkeyKey, dwSize);
RegSetValueEx(hKey, m_szShadowHotkeyShift, 0,
dwType, (LPBYTE) &m_ShadowHotkeyShift, dwSize);
RegCloseKey(hKey);
}
}
//
//
//
void CShadowStartDlg::OnInitDialog(HWND hwndDlg)
{
ShowWindow(GetDlgItem(hwndDlg, IDC_PRESS_NUMKEYPAD), SW_HIDE);
ShowWindow(GetDlgItem(hwndDlg, IDC_PRESS_KEY), SW_SHOW);
LRESULT index, match = -1;
HWND hComboBox = GetDlgItem(hwndDlg, IDC_SHADOWSTART_HOTKEY);
//
// Initialize the hotkey combo box.
//
for(int i=0; HotkeyLookupTable[i].String; i++ )
{
if((index = SendMessage(hComboBox,CB_ADDSTRING,0,LPARAM(HotkeyLookupTable[i].String))) < 0)
{
break;
}
if(SendMessage(hComboBox,CB_SETITEMDATA, index, LPARAM(HotkeyLookupTable[i].VKCode)) < 0)
{
SendMessage(hComboBox,CB_DELETESTRING,index,0);
break;
}
// If this is our current hotkey key, save it's index.
if(m_ShadowHotkeyKey == (int)HotkeyLookupTable[i].VKCode)
{
match = index;
switch ( HotkeyLookupTable[i].VKCode)
{
case VK_ADD :
case VK_MULTIPLY:
case VK_SUBTRACT:
// change the text
ShowWindow(GetDlgItem(hwndDlg, IDC_PRESS_KEY), SW_HIDE);
ShowWindow(GetDlgItem(hwndDlg, IDC_PRESS_NUMKEYPAD), SW_SHOW);
break;
}
}
}
//
// Select the current hotkey string in the combo box.
//
if(match)
{
SendMessage(hComboBox,CB_SETCURSEL,match,0);
}
//
// Initialize shift state checkboxes.
//
CheckDlgButton(hwndDlg, IDC_SHADOWSTART_SHIFT,(m_ShadowHotkeyShift & KBDSHIFT) ? TRUE : FALSE );
CheckDlgButton(hwndDlg, IDC_SHADOWSTART_CTRL,(m_ShadowHotkeyShift & KBDCTRL) ? TRUE : FALSE );
CheckDlgButton(hwndDlg, IDC_SHADOWSTART_ALT,(m_ShadowHotkeyShift & KBDALT) ? TRUE : FALSE );
}
//
//
//
void CShadowStartDlg::OnOk(HWND hwndDlg)
{
HWND hComboBox = GetDlgItem(hwndDlg, IDC_SHADOWSTART_HOTKEY);
// Get the current hotkey selection.
m_ShadowHotkeyKey = (DWORD)SendMessage(hComboBox,CB_GETITEMDATA,
SendMessage(hComboBox,CB_GETCURSEL,0,0),0);
// Get shift state checkbox states and form hotkey shift state.
m_ShadowHotkeyShift = 0;
m_ShadowHotkeyShift |=
IsDlgButtonChecked(hwndDlg, IDC_SHADOWSTART_SHIFT) ?
KBDSHIFT : 0;
m_ShadowHotkeyShift |=
IsDlgButtonChecked(hwndDlg, IDC_SHADOWSTART_CTRL) ?
KBDCTRL : 0;
m_ShadowHotkeyShift |=
IsDlgButtonChecked(hwndDlg, IDC_SHADOWSTART_ALT) ?
KBDALT : 0;
}
//***********************************************************************************
//CUserColSelectDlg class
//***********************************************************************************
const WCHAR g_szUsrColumns[] = L"UsrColumnSettings";
UserColumn CUserColSelectDlg::m_UsrColumns[USR_MAX_COLUMN]=
{
{IDS_USR_COL_USERNAME, IDC_USER_NAME, LVCFMT_LEFT, 120, TRUE},
{IDS_USR_COL_SESSION_ID, IDC_SESSION_ID, LVCFMT_RIGHT, 35, TRUE},
{IDS_USR_COL_SESSION_STATUS,IDC_SESSION_STATUS, LVCFMT_LEFT, 93, TRUE},
{IDS_USR_COL_CLIENT_NAME, IDC_CLIENT_NAME, LVCFMT_LEFT, 100, TRUE},
{IDS_USR_COL_WINSTA_NAME, IDC_WINSTA_NAME, LVCFMT_LEFT, 120, TRUE}
};
//
// get last saved values from the registry
//
BOOL CUserColSelectDlg::Load()
{
BOOL bResult=FALSE;
UserColumn * pdata = (UserColumn *) LocalAlloc( 0, sizeof(m_UsrColumns) );
if ( NULL != pdata )
{
HKEY hKey;
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, szTaskmanKey, 0, KEY_READ, &hKey))
{
DWORD dwType;
DWORD dwSize = sizeof(m_UsrColumns);
if ( ERROR_SUCCESS == RegQueryValueEx(hKey, g_szUsrColumns, 0, &dwType, (LPBYTE) pdata, &dwSize)
&& dwType == REG_BINARY && dwSize == sizeof(m_UsrColumns) )
{
bResult = TRUE;
//
// Validate the data
//
for ( ULONG idx = 0; idx < ARRAYSIZE(m_UsrColumns); idx ++ )
{
if ( pdata->dwNameID != m_UsrColumns->dwNameID
|| pdata->dwChkBoxID != m_UsrColumns->dwChkBoxID
|| pdata->Align != pdata->Align
)
{
bResult = FALSE;
break;
}
}
}
RegCloseKey(hKey);
}
if ( bResult )
{
CopyMemory( m_UsrColumns, pdata, sizeof(m_UsrColumns) );
}
LocalFree( pdata );
}
return bResult;
}
//
// save values into the registry
//
BOOL CUserColSelectDlg::Save()
{
HKEY hKey;
BOOL bResult=FALSE;
if (ERROR_SUCCESS == RegCreateKeyEx( HKEY_CURRENT_USER
, szTaskmanKey
, 0
, NULL
, REG_OPTION_NON_VOLATILE
, KEY_WRITE
, NULL
, &hKey
, NULL
))
{
DWORD dwSize = sizeof(m_UsrColumns);
if ( ERROR_SUCCESS == RegSetValueEx(hKey, g_szUsrColumns, 0, REG_BINARY, (LPBYTE) m_UsrColumns, dwSize) )
{
bResult = TRUE;
}
RegCloseKey(hKey);
}
return bResult;
}
//
// check checkboxes for all active columns
//
void CUserColSelectDlg::OnInitDialog(HWND hwndDlg)
{
for (int i = 0; i < USR_MAX_COLUMN; i++)
{
CheckDlgButton( hwndDlg, m_UsrColumns[i].dwChkBoxID,
m_UsrColumns[i].bActive ? BST_CHECKED : BST_UNCHECKED );
}
}
//
// First, make sure the column width array is up to date
//
void CUserColSelectDlg::OnOk(HWND hwndDlg)
{
for (int i = 1; i < USR_MAX_COLUMN; i++)
{
(BST_CHECKED == IsDlgButtonChecked(hwndDlg, m_UsrColumns[i].dwChkBoxID)) ?
m_UsrColumns[i].bActive=TRUE : m_UsrColumns[i].bActive=FALSE;
}
}
//***********************************************************************************
//CSendMessageDlg class
//***********************************************************************************
//
// Handles "Send Message" dialog
//
void CSendMessageDlg::OnInitDialog(HWND hwndDlg)
{
RECT parentRect, childRect;
INT xPos, yPos;
GetWindowRect(GetParent(hwndDlg), &parentRect);
GetWindowRect(hwndDlg, &childRect);
xPos = ( (parentRect.right + parentRect.left) -
(childRect.right - childRect.left)) / 2;
yPos = ( (parentRect.bottom + parentRect.top) -
(childRect.bottom - childRect.top)) / 2;
SetWindowPos(hwndDlg,
NULL,
xPos, yPos,
0, 0,
SWP_NOSIZE | SWP_NOACTIVATE);
SendMessage(GetDlgItem(hwndDlg, IDC_MESSAGE_MESSAGE), EM_LIMITTEXT,
MSG_MESSAGE_LENGTH, 0L );
EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE);
//
// Prepare default title
//
WCHAR szTime[MAX_DATE_TIME_LENGTH+1];
WCHAR szTemplate[MSG_TITLE_LENGTH+1];
WCHAR szUserName[MAX_PATH+1];
DWORD dwLen = LoadString( g_hInstance, IDS_DEFAULT_MESSAGE_TITLE, szTemplate, ARRAYSIZE(szTemplate) );
ASSERT( 0 != dwLen ); // Missing resource string?
dwLen; // unreferenced on FRE builds.
CurrentDateTimeString(szTime);
//
// Get user name.
// User does not always have "display name"
// in this case get his "sam compatible" name
//
ULONG MaxUserNameLength = ARRAYSIZE(szUserName);
if ( !GetUserNameEx( NameDisplay, szUserName, &MaxUserNameLength ) )
{
MaxUserNameLength = ARRAYSIZE(szUserName);
if ( !GetUserNameEx( NameSamCompatible, szUserName, &MaxUserNameLength) )
{
szUserName[ 0 ] = L'\0';
}
}
// UI only - don't care if it truncates
StringCchPrintf( m_szTitle, ARRAYSIZE(m_szTitle), szTemplate, szUserName, szTime );
SetDlgItemText(hwndDlg, IDC_MESSAGE_TITLE, m_szTitle);
SendMessage(GetDlgItem(hwndDlg, IDC_MESSAGE_TITLE), EM_LIMITTEXT, MSG_TITLE_LENGTH, 0L );
}
//
//
//
void CSendMessageDlg::OnOk(HWND hwndDlg)
{
GetWindowText( GetDlgItem(hwndDlg, IDC_MESSAGE_MESSAGE), m_szMessage, ARRAYSIZE(m_szMessage) );
GetWindowText( GetDlgItem(hwndDlg, IDC_MESSAGE_TITLE), m_szTitle, ARRAYSIZE(m_szTitle) );
}
//
//
//
void CSendMessageDlg::OnCommand(HWND hwndDlg,WORD NotifyId, WORD ItemId)
{
if (ItemId == IDC_MESSAGE_MESSAGE)
{
if (NotifyId == EN_CHANGE)
{
EnableWindow(GetDlgItem(hwndDlg, IDOK),
GetWindowTextLength(GetDlgItem(hwndDlg, IDC_MESSAGE_MESSAGE)) != 0);
}
}
}
//***********************************************************************************
//CConnectPasswordDlg class
//***********************************************************************************
//
//
//
void CConnectPasswordDlg::OnInitDialog(HWND hwndDlg)
{
WCHAR szPrompt[MAX_PATH+1];
LoadString( g_hInstance, m_ids, szPrompt, ARRAYSIZE(szPrompt) );
SetDlgItemText(hwndDlg, IDL_CPDLG_PROMPT, szPrompt);
SendMessage(GetDlgItem(hwndDlg, IDC_CPDLG_PASSWORD), EM_LIMITTEXT, PASSWORD_LENGTH, 0L );
}
//
//
//
void CConnectPasswordDlg::OnOk(HWND hwndDlg)
{
GetWindowText(GetDlgItem(hwndDlg, IDC_CPDLG_PASSWORD), m_szPassword, PASSWORD_LENGTH);
}