|
|
// 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; }
|