Драйвер принтера под 2000

From
Genadi Zawidowski (2:5020/175.2)
To
Timothy
Date
2002-02-07T11:43:03Z
Area
SU.WINDOWS.NT.PROG
From: "Genadi Zawidowski" <dolphin@infopro.spb.su>

Tue Feb 05 2002 18:55, Timothy wrote to All:

 T> Как модифицировать драйвер принтера, что бы он выводил диалоговое окно
 T> перед отправкой файла на печать?
 T> Где искать информацию?
 T> Спасибо.


int
DrvDocumentEvent(
    HANDLE  hPrinter,
    HDC     hdc,
    int     iEsc,
    ULONG   cbIn,
    PULONG  pbIn,
    ULONG   cbOut,
    PULONG  pbOut
)
{
	//WCHAR buff [512];
	//_snwprintf(buff, 512, L"DrvDocumentEvent: %d (0x%08lx)", iEsc, iEsc);
	//MessageBox(NULL, buff, L"DOCUMENTEVENT_XXX", MB_OK);

    Verbose(("DrvDocumentEvent: %d (%08lx)\n", iEsc, iEsc));


	switch (DOCUMENTEVENT_EVENT(iEsc))
	{
	case DOCUMENTEVENT_CREATEDCPRE:
		return DOCUMENTEVENT_SUCCESS;

	case DOCUMENTEVENT_STARTDOCPOST:
		{
			FAXADDRPARAM iniPort;
			DWORD dwJobTimeut = 300;
			DWORD bUseTiffG4 = FALSE;
			DWORD dwFAXMode = TRUE;
			HPPD    hppd;
			//ULONG ulJob = * ((PULONG) pbIn);

			iniPort.hPrinter = hPrinter;

			if (hppd = LoadPpdFile(hPrinter, FALSE)) 
			{
				PPRINTERDATA    pPrinterData;

				pPrinterData = GetPrinterProperties(hPrinter, hppd);

				if (pPrinterData == NULL) 
				{

					UnloadPpdFile(hppd);
					return DOCUMENTEVENT_FAILURE;
				}

				dwJobTimeut = pPrinterData->dwJobTimeout;
				bUseTiffG4 = (pPrinterData->dwFlags & PSDEV_TIFFG4) != 0;
				dwFAXMode = (pPrinterData->dwFlags & PSDEV_SILENT) == 0;

				{
					// Send mode information

					SFCOMMAND cmd;
					//
					// Use collected data

					PrepareDrvCommand(& cmd, 'FAPR');
					SendDataToprinter(hdc, & cmd, sizeof cmd);

					SendDataToprinter(hdc, & bUseTiffG4, sizeof bUseTiffG4);
					SendDataToprinter(hdc, & dwJobTimeut, sizeof dwJobTimeut);
					SendDataToprinter(hdc, & dwFAXMode, sizeof dwFAXMode);
				}


				if (dwFAXMode == 0)	// make mapi message with asked from user parameters
				{

					MEMFREE(pPrinterData);
					UnloadPpdFile(hppd);

					return DOCUMENTEVENT_SUCCESS;
				}

				{
					BOOL bDialogOkay;

					//MAKEINTRESOURCE(DLG_MAPIDLG)
					bDialogOkay = GetFileNameAndFaxParameters(hPrinter, & iniPort,
MAKEINTRESOURCE(DLG_MAPIDLG), pPrinterData->szSpoolDir);

					//
					// To handle Cancel button push in FAX address properties dialog.
					//
					if (bDialogOkay == FALSE)
					{
						MEMFREE(pPrinterData);
						UnloadPpdFile(hppd);
						//
						//SetJob(hPrinter, ulJob, 0, NULL, JOB_CONTROL_DELETE);
						return DOCUMENTEVENT_FAILURE;
					}
					else
					{
						SFCOMMAND cmd;
						//
						// Use collected data

						PrepareDrvCommand(& cmd, 'FAXA');
						SendDataToprinter(hdc, & cmd, sizeof cmd);
						SendDataToprinter(hdc, iniPort.szIMGFile, MAX_LEN_FILENAME);
						SendDataToprinter(hdc, iniPort.szINFFile, MAX_LEN_FILENAME);
						//
						MEMFREE(pPrinterData);
						UnloadPpdFile(hppd);

						return DOCUMENTEVENT_SUCCESS;
					}
				}
			}
			return DOCUMENTEVENT_FAILURE;
		}
		//
		return DOCUMENTEVENT_SUCCESS;
		
	default:
		return DOCUMENTEVENT_UNSUPPORTED;

	}
}

Генка, mgs2001[at]pochtamt.ru

--- ifmail v.2.15
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)