|
|
/*++
Copyright (C) Microsoft Corporation, 1996 - 1999 All rights reserved.
Module Name:
rundll.cxx
Abstract:
Run dll entry interface for lauching printer related UI from shell extenstion and other shell related components.
Author:
Steve Kiraly (SteveKi) 29-Sept-1996
Revision History:
--*/ #ifndef _RUNDLL_HXX
#define _RUNDLL_HXX
/********************************************************************
Printer commnad types.
********************************************************************/ enum { kProperties, // Printer properties
kWin32QueueView, // Printer queue view
kInstallNetPrinter, // Install connection to network printer
kDeleteNetPrinter, // Delete printer connection
kInstallLocalPrinter, // Install printer wizard
kInstallPrinterWithInf, // Install printer using an inf file
kDeleteLocalPrinter, // Delete printer wizard
kServerProperties, // Print server properties
kDocumentDefaults, // Document defaults
kInstallPrinterDriver, // Install printer driver
kInstallLocalPrinterWithInf, // Install printer wizard
kAddPerMachineConnection, // Add per machine printer connection
kDeletePerMachineConnection, // Delete per machine printer connection
kEnumPerMachineConnections, // Enumerate per machine printer connection
kInstallDriverWithInf, // Instal printer driver with inf
kDeletePrinterDriver, // Delete printer driver
kSetAsDefault, // Set printer as the default printer
kPrintTestPage, // Print the test page
kPrinterGetSettings, // Get printer settings, comment, location, port etc.
kPrinterSetSettings, // Set printer settings, comment, location, port etc.
kCommandHelp, // Command specific help
kPrinterPersist, // Persist printer settings into file
kPrinterRestore, // Restore printer settings from file
kUnknown // Unknown command type
};
enum { kMsgUnknownType, // The message type is unknown
kMsgConfirmation, // The message type is question (MB_ICONQUESTION)
kMsgWarning, // The message type is warning (MB_ICONEXCLAMATION)
};
struct AFlags { UINT IsQuiet:1; // Quiet flag
UINT IsSupressSetupUI:1; // Super quiet flag (supress setup warnings UI)
UINT IsWebPointAndPrint:1; // Used for web point and print
UINT IsNoSharing:1; // Is not to be shared
UINT IsUseExistingDriver:1; // Use exsiting driver if installed when adding a printer
UINT IsUnknownDriverPrompt:1; // Prompt if driver is not known
UINT IsPromptForNeededFiles:1; // Prompt if files are needed
UINT IsHydraSpecific:1; // Hydra specific flag
UINT IsShared:1; // Caller wants the printer shared
UINT IsWindowsUpdate:1; // Windows Update case, we need to ignore ths INF file.
UINT IsDontAutoGenerateName:1; // Don't auto generate a mangled printer name
UINT IsUseNonLocalizedStrings:1; // Use non localized strings Environment and Version
UINT IsWizardRestartable:1; // Is the wizard (APW & APDW) restartable from the last page
};
struct AParams { AFlags Flags; // Flags
INT dwSheet; // Property sheet to start on
LPTSTR pPrinterName; // Printer or server name
LPTSTR pPortName; // Port name
LPTSTR pModelName; // Printer model name
LPTSTR pInfFileName; // INF path and file name
LPTSTR pBasePrinterName; // INF install base printer name
DWORD dwLastError; // Last error of command
LPTSTR pMachineName; // Machine to act on
LPTSTR pSourcePath; // Driver sources path inf installation
LPCTSTR pszCmdLine; // Original command line passed to rundll32.exe
LPTSTR pBinFileName; // Binary file holds devmode & printer data
LPTSTR pProvider; // Name of the Print Provider
LPTSTR pVersion; // Driver version
LPTSTR pArchitecture; // Driver architecture
LPTSTR pAttribute; // Print queue attribute name
LPTSTR pMsgConfirm; // Message confirmation text
UINT uMsgType; // Message type (can be question or warning)
UINT ac; // Remaining argument count
LPTSTR *av; // Remaining arguments
};
/********************************************************************
Run DLL command interface. Note the W appended to this function is neccessary to indicate to rundll32.exe that this interface accepts unicode characters only.
rundll32.exe commands are of the form.
rundll32 DLL,FunctionName Args
Args is text string just like any command line argument.
Example:
rundll32 printui.dll,PrintUIEntry /o /d \\steveki1\test_printer
This command will load the printui.dll library and call the function PrintUIEntryW with the following command line arguments. "/o /d \\steveki1\test_printer"
In this example a queue for \\steveki1\test_printer will be opened and displayed.
Note: All arguments are case sensitive.
See the function PrintUIEntryW for command specific information.
********************************************************************/ DWORD PrintUIEntryW( IN HWND hwnd, IN HINSTANCE hInstance, IN LPCTSTR pszCmdLine, IN UINT nCmdShow );
BOOL bValidateCommand( IN INT iFunction, IN AParams *pParams );
BOOL bExecuteCommand( IN HWND hwnd, IN INT iFunction, IN AParams *Params );
BOOL bDoCommand( IN HWND hwnd, IN INT ac, IN LPTSTR *av, IN AParams *pParams );
BOOL bDoInfPrinterInstall( IN AParams *pParams );
BOOL bDoInfDriverInstall( IN AParams *pParams );
VOID vUsage( IN AParams *pParams );
BOOL bDoPersistPrinterSettings( IN INT iFunction, IN AParams *pParams );
BOOL bDoWebPnpPreInstall( IN AParams *pParams );
BOOL bDoDriverRemoval( IN AParams *pParams );
BOOL bDoGetPrintSettings( IN AParams *pParams );
BOOL bDoSetPrintSettings( IN AParams *pParams );
BOOL PrintSettings_ValidateArguments( IN AParams *pParams );
BOOL PrintSettings_SetInfo( IN AParams *pParams, IN PRINTER_INFO_2 &Info );
BOOL PrintSettings_DisplayHelp( IN AParams *pParams, IN TSelect::Selection *pSelection );
BOOL PrintSettings_DisplayInformation( IN AParams *pParams, IN TSelect::Selection *pSelection );
BOOL PrintSettings_DisplayAttributes( IN TString &strBit, IN TSelect::Selection *pSelection, IN UINT uAttributes );
BOOL PrintSettings_DisplayStatus( IN TString &strVal, IN TSelect::Selection *pSelection, IN UINT uStatus );
/********************************************************************
Very simple file output class.
********************************************************************/
class TFile {
public:
enum FilePrefix { kUnicodePrefix = 0xFEFF };
TFile( IN LPCTSTR pszFileName, IN BOOL bNoUnicodeByteMark = FALSE );
~TFile( VOID );
BOOL bValid( VOID );
BOOL bWrite( IN TString &strString, OUT UINT *pBytesWritten = NULL );
BOOL bWrite( IN UINT uSize, IN LPBYTE pData, OUT UINT *pBytesWritten = NULL );
private:
//
// Assignment and copying are not defined
//
TFile & operator =( const TFile & );
TFile( const TFile & );
HANDLE _hFile; TString _strFileName; BOOL _bValid;
};
/********************************************************************
RunDllDisplay
********************************************************************/
class TRunDllDisplay : public MGenericDialog {
public:
enum DisplayType { kEditBox, kFile, };
TRunDllDisplay( IN HWND hWnd, IN LPCTSTR pszFileName = NULL, IN DisplayType Display = kEditBox );
~TRunDllDisplay( VOID );
BOOL bValid( VOID );
BOOL bDoModal( VOID );
BOOL WriteOut( LPCTSTR pszData );
BOOL SetTitle( LPCTSTR pszData );
VOID vSetTabStops( IN UINT uTabStop );
private:
//
// Assignment and copying are not defined
//
TRunDllDisplay & operator =( const TRunDllDisplay & );
TRunDllDisplay( const TRunDllDisplay & );
BOOL bSetUI( VOID );
BOOL bHandle_WM_SIZE( IN WPARAM wParam, IN LPARAM lParam );
BOOL bHandle_WM_GETMINMAXINFO( IN WPARAM wParam, IN LPARAM lParam );
BOOL bHandleMessage( IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam );
HWND _hWnd; BOOL _bValid; DisplayType _Display; TString _StringOutput; TString _StringTitle; TFile *_pFile; POINT _ptLastSize; POINT _ptMinTrack; INT _cxGrip; INT _cyGrip; HWND _hwndGrip; UINT _cTabStop; DWORD _dwTabStop;
};
#endif
|