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.
 
 
 
 
 
 

219 lines
5.9 KiB

// IFaxControl.cpp : Implementation of CFaxControl
#include "stdafx.h"
#include "FaxControl.h"
#include "IFaxControl.h"
#include "faxocm.h"
#include "faxres.h"
#include <faxsetup.h>
/////////////////////////////////////////////////////////////////////////////
// CFaxControl
FaxInstallationReportType g_InstallReportType = REPORT_FAX_DETECT;
//
// IsFaxInstalled and InstallFaxUnattended are implemented in fxocprnt.cpp
//
DWORD
IsFaxInstalled (
LPBOOL lpbInstalled
);
//
// This function is trying to get the last active popup of the top
// level owner of the current thread active window.
//
HRESULT GetCurrentThreadLastPopup(HWND *phwnd)
{
HRESULT hr = E_INVALIDARG;
if( phwnd )
{
hr = E_FAIL;
if( NULL == *phwnd )
{
// if *phwnd is NULL then get the current thread active window
GUITHREADINFO ti = {0};
ti.cbSize = sizeof(ti);
if( GetGUIThreadInfo(GetCurrentThreadId(), &ti) && ti.hwndActive )
{
*phwnd = ti.hwndActive;
}
}
if( *phwnd )
{
HWND hwndOwner, hwndParent;
// climb up to the top parent in case it's a child window...
while( hwndParent = GetParent(*phwnd) )
{
*phwnd = hwndParent;
}
// get the owner in case the top parent is owned
hwndOwner = GetWindow(*phwnd, GW_OWNER);
if( hwndOwner )
{
*phwnd = hwndOwner;
}
// get the last popup of the owner of the top level parent window
*phwnd = GetLastActivePopup(*phwnd);
hr = (*phwnd) ? S_OK : E_FAIL;
}
}
return hr;
}
///////////////////////////////////////////////////////////////////////////////////////
// Function:
// DisplayErrorMessage
//
// Purpose:
// Load FXSRES.DLL and load an error message string from it
// Display this string in a message box
// Ideally, we would have added the error message dialog to this module
// but this is added in a time of UI freeze (close to RTM) and the only
// place we have such a dialog is FXSRES.DLL
//
// Params:
// Error code
//
// Return Value:
// NO_ERROR - everything was ok.
// Win32 Error code in case if failure.
//
// Author:
// Mooly Beery (MoolyB) 19-Jul-2001
///////////////////////////////////////////////////////////////////////////////////////
static DWORD DisplayErrorMessage(DWORD ec)
{
DWORD dwReturn = NO_ERROR;
HMODULE hModule = NULL;
HWND hWnd = NULL;
TCHAR tszMessage[MAX_PATH] = {0};
UINT uResourceId = 0;
DBG_ENTER(_T("DisplayErrorMessage"), dwReturn);
hModule = GetResInstance(NULL);
if (!hModule)
{
return dwReturn;
}
// get the string id
uResourceId = GetErrorStringId(ec);
dwReturn = LoadString(hModule,uResourceId,tszMessage,MAX_PATH);
if (dwReturn==0)
{
//
// Resource string is not found
//
dwReturn = GetLastError();
VERBOSE(DBG_WARNING, _T("LoadString() failed, ec = %ld."), dwReturn);
goto exit;
}
// try to get the windows handle for the current thread.
if (FAILED(GetCurrentThreadLastPopup(&hWnd)))
{
CALL_FAIL(GENERAL_ERR,TEXT("GetCurrentThreadLastPopup"), GetLastError());
hWnd = NULL;
}
// show the message
MessageBox(hWnd,tszMessage,NULL,MB_OK | MB_ICONERROR | MB_TOPMOST);
exit:
FreeResInstance();
return dwReturn;
}
STDMETHODIMP CFaxControl::get_IsFaxServiceInstalled(VARIANT_BOOL *pbResult)
{
HRESULT hr;
BOOL bRes;
DBG_ENTER(_T("CFaxControl::get_IsFaxServiceInstalled"), hr);
DWORD dwRes = ERROR_SUCCESS;
switch (g_InstallReportType)
{
case REPORT_FAX_INSTALLED:
bRes = TRUE;
break;
case REPORT_FAX_UNINSTALLED:
bRes = FALSE;
break;
case REPORT_FAX_DETECT:
dwRes = IsFaxInstalled (&bRes);
break;
default:
ASSERTION_FAILURE;
bRes = FALSE;
break;
}
if (ERROR_SUCCESS == dwRes)
{
*pbResult = bRes ? VARIANT_TRUE : VARIANT_FALSE;
}
hr = HRESULT_FROM_WIN32 (dwRes);
return hr;
}
STDMETHODIMP CFaxControl::get_IsLocalFaxPrinterInstalled(VARIANT_BOOL *pbResult)
{
HRESULT hr;
BOOL bRes;
DBG_ENTER(_T("CFaxControl::get_IsLocalFaxPrinterInstalled"), hr);
DWORD dwRes = ::IsLocalFaxPrinterInstalled (&bRes);
if (ERROR_SUCCESS == dwRes)
{
*pbResult = bRes ? VARIANT_TRUE : VARIANT_FALSE;
}
hr = HRESULT_FROM_WIN32 (dwRes);
return hr;
}
STDMETHODIMP CFaxControl::InstallFaxService()
{
HRESULT hr;
DBG_ENTER(_T("CFaxControl::InstallFaxService"), hr);
DWORD dwRes = InstallFaxUnattended ();
hr = HRESULT_FROM_WIN32 (dwRes);
return hr;
}
STDMETHODIMP CFaxControl::InstallLocalFaxPrinter()
{
HRESULT hr;
DWORD dwRes = ERROR_SUCCESS;
DBG_ENTER(_T("CFaxControl::InstallLocalFaxPrinter"), hr);
dwRes = AddLocalFaxPrinter (FAX_PRINTER_NAME, NULL);
if (dwRes!=ERROR_SUCCESS)
{
// fail to add the local fax printer
// display an error message
if (DisplayErrorMessage(dwRes)!=ERROR_SUCCESS)
{
CALL_FAIL(GENERAL_ERR,TEXT("DisplayErrorMessage"), GetLastError());
}
}
hr = HRESULT_FROM_WIN32 (dwRes);
return hr;
}