windows-nt/Source/XPSP1/NT/net/tapi/skywalker/apps/t3test/ilsdlg.cpp
2020-09-26 16:20:57 +08:00

350 lines
7 KiB
C++

// autoans.cpp : implementation file
//
#include "stdafx.h"
#include "t3test.h"
#include "t3testd.h"
#include "ilsdlg.h"
#include "servname.h"
#include "resource.h"
#include "strings.h"
#ifdef _DEBUG
#ifndef _WIN64 // mfc 4.2's heap debugging features generate warnings on win64
#define new DEBUG_NEW
#endif
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CILSDlg::CILSDlg(CWnd* pParent /*=NULL*/)
: CDialog(CILSDlg::IDD, pParent)
{
}
void CILSDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BOOL CILSDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ListServers();
return TRUE;
}
void CILSDlg::OnOK()
{
SaveServers();
CDialog::OnOK();
}
void CILSDlg::OnDestroy()
{
CleanUp();
CDialog::OnDestroy();
}
void CILSDlg::ListServers()
{
HRESULT hr;
LPWSTR * ppServers;
DWORD dw;
hr = ListILSServers(
&ppServers,
&dw
);
if ( !SUCCEEDED(hr) )
{
return;
}
while (dw)
{
dw--;
SendDlgItemMessage(
IDC_ILSLIST,
LB_ADDSTRING,
0,
(LPARAM) ppServers[dw]
);
CoTaskMemFree( ppServers[dw] );
}
CoTaskMemFree( ppServers );
}
void CILSDlg::SaveServers()
{
HKEY hKey, hAppKey;
DWORD dw;
if ( RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
PARENTKEY,
0,
KEY_WRITE,
&hKey
) != ERROR_SUCCESS )
{
}
if ( RegCreateKeyEx(
hKey,
APPKEY,
0,
L"",
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hAppKey,
&dw
) != ERROR_SUCCESS )
{
}
RegCloseKey( hKey );
RegDeleteKey(
hAppKey,
SERVERKEY
);
if ( RegCreateKeyEx(
hAppKey,
SERVERKEY,
0,
L"",
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hKey,
&dw
) != ERROR_SUCCESS )
{
}
RegCloseKey (hAppKey );
dw = SendDlgItemMessage(
IDC_ILSLIST,
LB_GETCOUNT,
0,
0
);
while ( 0 != dw )
{
WCHAR szServer[256];
WCHAR szBuffer[256];
dw--;
wsprintf(szServer, L"server%d", dw);
SendDlgItemMessage(
IDC_ILSLIST,
LB_GETTEXT,
dw,
(LPARAM)szBuffer
);
RegSetValueEx(
hKey,
szServer,
0,
REG_SZ,
(BYTE *)szBuffer,
lstrlenW(szBuffer) * sizeof(WCHAR)
);
}
}
void CILSDlg::CleanUp()
{
}
void CILSDlg::OnAdd()
{
CServNameDlg dlg;
if (IDOK == dlg.DoModal())
{
SendDlgItemMessage(
IDC_ILSLIST,
LB_ADDSTRING,
0,
(LPARAM)(LPCTSTR)(dlg.m_pszServerName)
);
}
}
void CILSDlg::OnRemove()
{
DWORD dw;
dw = SendDlgItemMessage(
IDC_ILSLIST,
LB_GETCURSEL,
0,
0
);
if ( dw != LB_ERR )
{
SendDlgItemMessage(
IDC_ILSLIST,
LB_DELETESTRING,
dw,
0
);
}
}
BEGIN_MESSAGE_MAP(CILSDlg, CDialog)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_REMOVE, OnRemove)
END_MESSAGE_MAP()
HRESULT ListILSServers(
LPWSTR ** pppServers,
DWORD * pdwNumServers
)
{
HKEY hKey, hAppKey;
DWORD dw, dwSize;
//
// look in the directory for the
//
if ( RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
PARENTKEY,
0,
KEY_WRITE,
&hKey
) != ERROR_SUCCESS )
{
}
if ( RegOpenKeyEx(
hKey,
APPKEY,
0,
KEY_ALL_ACCESS,
&hAppKey
) != ERROR_SUCCESS )
{
RegCloseKey( hKey );
return E_FAIL;
}
RegCloseKey( hKey );
if ( RegOpenKeyEx(
hAppKey,
SERVERKEY,
0,
KEY_ALL_ACCESS,
&hKey
) != ERROR_SUCCESS )
{
RegCloseKey(hAppKey);
return E_FAIL;
}
RegCloseKey (hAppKey );
dw = 0;
while (TRUE)
{
WCHAR szBuffer[256];
WCHAR szServer[256];
DWORD dwType;
wsprintf(szBuffer, L"server%d", dw);
if ( RegQueryValueEx(
hKey,
szBuffer,
NULL,
NULL,
NULL,
&dwSize
) != ERROR_SUCCESS )
{
break;
}
dw++;
}
*pppServers = (LPWSTR *)CoTaskMemAlloc( dw * sizeof (LPWSTR) );
if ( NULL == *pppServers )
{
return E_OUTOFMEMORY;
}
dw = 0;
while (TRUE)
{
WCHAR szBuffer[256];
WCHAR szServer[256];
DWORD dwType;
wsprintf(szBuffer, L"server%d", dw);
dwSize = 256;
if ( RegQueryValueEx(
hKey,
szBuffer,
NULL,
NULL,
(LPBYTE)szServer,
&dwSize
) != ERROR_SUCCESS )
{
break;
}
(*pppServers)[dw] = (LPWSTR) CoTaskMemAlloc( (lstrlenW(szServer) + 1) * sizeof(WCHAR));
lstrcpy(
(*pppServers)[dw],
szServer
);
dw++;
}
*pdwNumServers = dw;
RegCloseKey( hKey );
return S_OK;
}