How To Determine Whether a Printer Is a PostScript Printer (264036)



The information in this article applies to:

  • Microsoft Win32 Software Development Kit (SDK) 4.0
  • Microsoft Windows 98
  • Microsoft Windows 95
  • Microsoft Windows NT Server 4.0
  • Microsoft Windows NT Workstation 4.0

This article was previously published under Q264036

SUMMARY

It is necessary sometimes to determine whether or not a printer is a PostScript printer, so that an application can determine whether or not it can safely send raw PostScript data to the printer. The code in this article demonstrates one way to make this determination.

MORE INFORMATION

The code first tests for support of the POSTSCRIPT_PASSTHROUGH printer escape function, assuming that if the escape function is supported then the printer must be a PostScript printer. If the printer does not support the escape function, the second half of the code uses the GETTECHNOLOGY escape function to determine whether the technology string contains the text "postscript". If the driver doesn't support the escape, it is assumed that it is not a PostScript printer.
BOOL IsDCPostscript( HDC hDC )
{
	int		nEscapeCode;
	TCHAR	szTechnology[MAX_PATH] = TEXT("");

	// If it supports POSTSCRIPT_PASSTHROUGH, it must be PS.
	nEscapeCode = POSTSCRIPT_PASSTHROUGH;
	if( ExtEscape( hDC, QUERYESCSUPPORT, sizeof(int), (LPCSTR)&nEscapeCode, 0, NULL ) > 0 )
		return TRUE;<BR/>

	// If it doesn't support GETTECHNOLOGY, we won't be able to tell.
	nEscapeCode = GETTECHNOLOGY;
	if( ExtEscape( hDC, QUERYESCSUPPORT, sizeof(int), (LPCSTR)&nEscapeCode, 0, NULL ) <= 0 )
		return FALSE;<BR/>

	// Get the technology string and check to see if the word "postscript" is in it.
	if( ExtEscape( hDC, GETTECHNOLOGY, 0, NULL, MAX_PATH, (LPSTR)szTechnology ) <= 0 )
		return FALSE;
	strupr( szTechnology );
	if( strstr( szTechnology, "POSTSCRIPT" ) == NULL )
		return FALSE;<BR/>

	// The word "postscript" was not found and it didn't support 
	//   POSTSCRIPT_PASSTHROUGH, so it's not a PS printer.
	return FALSE;
}
				

Modification Type:MinorLast Reviewed:4/4/2006
Keywords:kbDSWGDI2003Swept kbGDI kbhowto kbprint KB264036