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.
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 )
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 )
// 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 )
// 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 )
strupr( szTechnology );
if( strstr( szTechnology, "POSTSCRIPT" ) == NULL )
// The word "postscript" was not found and it didn't support
// POSTSCRIPT_PASSTHROUGH, so it's not a PS printer.
Article ID: 264036 - Last Review: January 27, 2007 - Revision: 1.5
- Microsoft Win32 Software Development Kit (SDK) 4.0
- Microsoft Windows 98 Standard Edition
- Microsoft Windows 95
- Microsoft Windows NT Server 4.0 Standard Edition
- Microsoft Windows NT Workstation 4.0 Developer Edition
|kbdswgdi2003swept kbgdi kbhowto kbprint KB264036|