mirror of https://github.com/tongzx/nt5src
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.
407 lines
7.3 KiB
407 lines
7.3 KiB
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
faxcfg.c
|
|
|
|
Abstract:
|
|
|
|
Implementation of the control panel applet entry point
|
|
|
|
Environment:
|
|
|
|
Windows NT fax configuration applet
|
|
|
|
Revision History:
|
|
|
|
02/27/96 -davidx-
|
|
Created it.
|
|
|
|
05/22/96 -davidx-
|
|
Share the same DLL with remote admin program.
|
|
|
|
mm/dd/yy -author-
|
|
description
|
|
|
|
--*/
|
|
|
|
#include <stdlib.h>
|
|
#include <windows.h>
|
|
#include <windowsx.h>
|
|
#include <commctrl.h>
|
|
#include <tchar.h>
|
|
|
|
#include "faxcfg.h"
|
|
#include "resource.h"
|
|
|
|
|
|
//
|
|
// Name of the remote fax server machine
|
|
//
|
|
|
|
#define MAX_NAME (MAX_COMPUTERNAME_LENGTH+3)
|
|
#define MAX_TITLE_LEN 128
|
|
#define MAX_MESSAGE_LEN 512
|
|
#define MAX_PAGES 16
|
|
|
|
HINSTANCE ghInstance;
|
|
INT gFaxConfigType;
|
|
INT gNumPages;
|
|
HPROPSHEETPAGE ghPropSheetPages[MAX_PAGES];
|
|
TCHAR FaxServerName[MAX_NAME];
|
|
TCHAR TitleStr[MAX_TITLE_LEN];
|
|
|
|
|
|
|
|
VOID
|
|
DisplayErrorMessage(
|
|
INT msgStrId
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Display an error message dialog box
|
|
|
|
Arguments:
|
|
|
|
msgStrId - Message format string resource ID
|
|
|
|
Return Value:
|
|
|
|
NONE
|
|
|
|
--*/
|
|
|
|
{
|
|
TCHAR buffer[MAX_MESSAGE_LEN];
|
|
|
|
if (! LoadString(ghInstance, msgStrId, buffer, MAX_MESSAGE_LEN))
|
|
buffer[0] = 0;
|
|
|
|
MessageBox(NULL, buffer, TitleStr, MB_OK | MB_ICONERROR);
|
|
}
|
|
|
|
|
|
|
|
VOID
|
|
MakeTitleString(
|
|
LPTSTR pServerName
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Compose the title string for the remote configuration dialog
|
|
|
|
Arguments:
|
|
|
|
pServerName - Specifies the name of the remote server
|
|
|
|
Return Value:
|
|
|
|
NONE
|
|
|
|
--*/
|
|
|
|
{
|
|
if (! LoadString(ghInstance, IDS_FAX_REMOTE_ADMIN, TitleStr, MAX_TITLE_LEN))
|
|
TitleStr[0] = 0;
|
|
|
|
if (_tcslen(TitleStr) + _tcslen(pServerName) < MAX_TITLE_LEN)
|
|
_tcscat(TitleStr, pServerName);
|
|
}
|
|
|
|
|
|
|
|
BOOL CALLBACK
|
|
GetFaxServerNameProc(
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Dialog procedure for prompting the user to enter a fax server name
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to dialog window
|
|
uMsg - Message
|
|
wParam, lParam - Parameters
|
|
|
|
Return Value:
|
|
|
|
Depends on message
|
|
|
|
--*/
|
|
|
|
{
|
|
switch (uMsg) {
|
|
|
|
case WM_INITDIALOG:
|
|
|
|
SendDlgItemMessage(hDlg, IDC_FAXSERVER_NAME, EM_LIMITTEXT, MAX_NAME-1, 0);
|
|
SetDlgItemText(hDlg, IDC_FAXSERVER_NAME, FaxServerName);
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
|
|
|
|
case IDC_FAXSERVER_NAME:
|
|
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE) {
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDOK),
|
|
GetWindowTextLength(GetDlgItem(hDlg, IDC_FAXSERVER_NAME)) > 0);
|
|
}
|
|
return TRUE;
|
|
|
|
case IDOK:
|
|
|
|
if (GetWindowTextLength(GetDlgItem(hDlg, IDC_FAXSERVER_NAME)) > 0) {
|
|
|
|
GetDlgItemText(hDlg, IDC_FAXSERVER_NAME, FaxServerName, MAX_NAME);
|
|
EndDialog(hDlg, IDOK);
|
|
|
|
} else
|
|
MessageBeep(MB_OK);
|
|
|
|
return TRUE;
|
|
|
|
case IDCANCEL:
|
|
|
|
EndDialog(hDlg, IDCANCEL);
|
|
return TRUE;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
|
ConnectFaxServerThread(
|
|
HWND hDlg
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Thread proc for connecting to the remote fax server
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to the status dialog
|
|
|
|
Return Value:
|
|
|
|
IDOK if successful, IDCANCEL otherwise
|
|
|
|
--*/
|
|
|
|
{
|
|
DWORD result = IDCANCEL;
|
|
|
|
gFaxConfigType = FaxConfigInit(FaxServerName, FALSE);
|
|
|
|
if (gFaxConfigType == FAXCONFIG_SERVER &&
|
|
(gNumPages = FaxConfigGetServerPages(ghPropSheetPages, MAX_PAGES)) <= MAX_PAGES)
|
|
{
|
|
result = IDOK;
|
|
}
|
|
|
|
PostMessage(hDlg, WM_APP, result, 0);
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
BOOL CALLBACK
|
|
ConnectFaxServerProc(
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Dialog procedure for connecting to the fax server
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to dialog window
|
|
uMsg - Message
|
|
wParam, lParam - Parameters
|
|
|
|
Return Value:
|
|
|
|
Depends on message
|
|
|
|
--*/
|
|
|
|
{
|
|
HANDLE hThread;
|
|
DWORD threadId;
|
|
|
|
switch (uMsg) {
|
|
|
|
case WM_INITDIALOG:
|
|
|
|
SetWindowText(hDlg, TitleStr);
|
|
|
|
if (hThread = CreateThread(NULL,
|
|
0,
|
|
(LPTHREAD_START_ROUTINE) ConnectFaxServerThread,
|
|
(LPVOID) hDlg,
|
|
0,
|
|
&threadId))
|
|
{
|
|
CloseHandle(hThread);
|
|
} else
|
|
EndDialog(hDlg, IDCANCEL);
|
|
|
|
break;
|
|
|
|
case WM_APP:
|
|
|
|
EndDialog(hDlg, wParam);
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
INT
|
|
wWinMain(
|
|
HINSTANCE hInstance,
|
|
HINSTANCE hPrevInstance,
|
|
LPTSTR lpCmdLine,
|
|
INT nCmdShow
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Application entry point
|
|
|
|
Arguments:
|
|
|
|
hInstance - Identifies the current instance of the application
|
|
hPrevInstance - Identifies the previous instance of the application
|
|
lpCmdLine - Specifies the command line for the application.
|
|
nCmdShow - Specifies how the window is to be shown
|
|
|
|
Return Value:
|
|
|
|
0
|
|
|
|
--*/
|
|
|
|
{
|
|
PROPSHEETHEADER psh;
|
|
BOOL cmdlineServerName;
|
|
BOOL success = FALSE;
|
|
|
|
ghInstance = hInstance;
|
|
|
|
//
|
|
// Check if the server name is specified on the command line
|
|
//
|
|
|
|
if (lpCmdLine && *lpCmdLine) {
|
|
|
|
cmdlineServerName = TRUE;
|
|
|
|
if (_tcslen(lpCmdLine) > MAX_NAME+2) {
|
|
|
|
MakeTitleString(lpCmdLine);
|
|
DisplayErrorMessage(IDS_NAME_TOO_LONG);
|
|
return -1;
|
|
|
|
} else
|
|
_tcscpy(FaxServerName, lpCmdLine);
|
|
|
|
} else
|
|
cmdlineServerName = FALSE;
|
|
|
|
do {
|
|
|
|
//
|
|
// Let the user enter the name of fax server computer
|
|
//
|
|
|
|
if (! cmdlineServerName &&
|
|
DialogBox(hInstance,
|
|
MAKEINTRESOURCE(IDD_SELECT_FAXSERVER),
|
|
NULL,
|
|
GetFaxServerNameProc) != IDOK)
|
|
{
|
|
break;
|
|
}
|
|
|
|
MakeTitleString(FaxServerName);
|
|
|
|
//
|
|
// Establish connection to the fax server
|
|
//
|
|
|
|
gFaxConfigType = -1;
|
|
|
|
if (DialogBox(ghInstance,
|
|
MAKEINTRESOURCE(IDD_CONNECT_FAXSERVER),
|
|
NULL,
|
|
ConnectFaxServerProc) == IDOK)
|
|
{
|
|
ZeroMemory(&psh, sizeof(psh));
|
|
psh.dwSize = sizeof(PROPSHEETHEADER);
|
|
psh.dwFlags = PSH_USEICONID;
|
|
psh.hwndParent = NULL;
|
|
psh.hInstance = ghInstance;
|
|
psh.pszIcon = MAKEINTRESOURCE(IDI_FAX_REMOTE_ADMIN);
|
|
psh.pszCaption = TitleStr;
|
|
psh.nPages = gNumPages;
|
|
psh.phpage = ghPropSheetPages;
|
|
|
|
//
|
|
// Display the property sheet
|
|
//
|
|
|
|
success = (PropertySheet(&psh) != -1);
|
|
}
|
|
|
|
if (gFaxConfigType >= 0)
|
|
FaxConfigCleanup();
|
|
|
|
//
|
|
// Display an error message if the fax server
|
|
// configuration dialog wasn't displayed
|
|
//
|
|
|
|
if (! success)
|
|
DisplayErrorMessage(IDS_REMOTE_ADMIN_FAILED);
|
|
|
|
} while (!success && !cmdlineServerName);
|
|
|
|
return 0;
|
|
}
|
|
|