How to get the default printer on the computer?
How to get the printer port standard?
If the default is mapped, how to get the path?
Example: \\computer\printer
For nX := 1 To Len(aPrinters)
? "Druckername: " + aPrinters[nX][1],;
"Drucker-Port: " + aPrinters[nX][2],;
"Lokal/Netz: " + aPrinters[nX][3] ,;
"Modell: " + aPrinters[nX][4],;
"Freigabename: " + aPrinters[nX][5]
Next
#define PRINTER_STATUS_OK 0
#define PRINTER_STATUS_PAUSED 1
#define PRINTER_STATUS_ERROR 2
#define PRINTER_STATUS_PENDING_DELETION 4
#define PRINTER_STATUS_PAPER_JAM 8
#define PRINTER_STATUS_PAPER_OUT 16
#define PRINTER_STATUS_MANUAL_FEED 32
#define PRINTER_STATUS_PAPER_PROBLEM 64
#define PRINTER_STATUS_OFFLINE 128
#define PRINTER_STATUS_IO_ACTIVE 256
#define PRINTER_STATUS_BUSY 512
#define PRINTER_STATUS_PRINTING 1024
#define PRINTER_STATUS_OUTPUT_BIN_FULL 2048
#define PRINTER_STATUS_NOT_AVAILABLE 4096
#define PRINTER_STATUS_WAITING 8192
#define PRINTER_STATUS_PROCESSING 16384
#define PRINTER_STATUS_INITIALIZING 32768
#define PRINTER_STATUS_WARMING_UP 65536
#define PRINTER_STATUS_TONER_LOW 131072
#define PRINTER_STATUS_NO_TONER 262144
#define PRINTER_STATUS_PAGE_PUNT 524288
#define PRINTER_STATUS_USER_INTERVENTION 1048576
#define PRINTER_STATUS_OUT_OF_MEMORY 2097152
#define PRINTER_STATUS_DOOR_OPEN 4194304
#define PRINTER_STATUS_SERVER_UNKNOWN 8388608
#define PRINTER_STATUS_POWER_SAVE 16777216
For nX := 1 To Len(aPrinters)
? "Druckername: " + aPrinters[nX][1],;
"Drucker-Port: " + aPrinters[nX][2],;
"Lokal/Netz: " + aPrinters[nX][3] ,;
"Modell: " + aPrinters[nX][4],;
"Freigabename: " + aPrinters[nX][5], ;
"Status : " + STR ( PrnStatus( aPrinters[nX][2] ) )
Next
// Syntax : PrnStatus( "LPT1:" )
// I don't know, if aPrinters[nX][2] Returns a string : "LPT1" or "LPT1:" ( not tested )
// Maybe to change in : aPrinters[nX][2] + ":"
return nil
#include "Fivewin.ch"
#define PRINTER_STATUS_OK 0
#define PRINTER_STATUS_PAUSED 1
#define PRINTER_STATUS_ERROR 2
#define PRINTER_STATUS_PENDING_DELETION 4
#define PRINTER_STATUS_PAPER_JAM 8
#define PRINTER_STATUS_PAPER_OUT 16
#define PRINTER_STATUS_MANUAL_FEED 32
#define PRINTER_STATUS_PAPER_PROBLEM 64
#define PRINTER_STATUS_OFFLINE 128
#define PRINTER_STATUS_IO_ACTIVE 256
#define PRINTER_STATUS_BUSY 512
#define PRINTER_STATUS_PRINTING 1024
#define PRINTER_STATUS_OUTPUT_BIN_FULL 2048
#define PRINTER_STATUS_NOT_AVAILABLE 4096
#define PRINTER_STATUS_WAITING 8192
#define PRINTER_STATUS_PROCESSING 16384
#define PRINTER_STATUS_INITIALIZING 32768
#define PRINTER_STATUS_WARMING_UP 65536
#define PRINTER_STATUS_TONER_LOW 131072
#define PRINTER_STATUS_NO_TONER 262144
#define PRINTER_STATUS_PAGE_PUNT 524288
#define PRINTER_STATUS_USER_INTERVENTION 1048576
#define PRINTER_STATUS_OUT_OF_MEMORY 2097152
#define PRINTER_STATUS_DOOR_OPEN 4194304
#define PRINTER_STATUS_SERVER_UNKNOWN 8388608
#define PRINTER_STATUS_POWER_SAVE 16777216
function Main()
local nStatus := PrnStatus( "LPT1:" )
MsgInfo( nStatus)
CheckAll ()
return nil
FUNCTION CheckAll ()
LOCAL nx, aPrinters, cPrn
aPrinters := GetPrinters(.t.)
For nX := 1 To Len(aPrinters)
cPrn := "Druckername: " + aPrinters[nX][1] +CRLF+;
"Drucker-Port: " + aPrinters[nX][2] +CRLF+;
"Lokal/Netz: " + aPrinters[nX][3] +CRLF+;
"Modell: " + aPrinters[nX][4] +CRLF+;
"Freigabename: " + aPrinters[nX][5] +CRLF+ ;
"Status : " + STR ( PrnStatus( aPrinters[nX][2]+":" ) )
MsgInfo (cPrn)
Next
RETURN (nil)
To further complicate things, it turns out that Windows only queries the printer for its status when there's a print job for the it, which means that if you are not printing you probably can't find out the real printer status. If you are not concerned about this, you'll be glad to know that you can obtain the same information on WinNT and Win9x by querying the print job instead of the printer for the status, via the GetJob() api.
#define ERROR_INVALID_PRINTER_NAME 1801
FUNCTION CheckStatus (cPrinter)
LOCAL nStatus := PrinterStatus (cPrinter)
LOCAL cStatus := IIF (nStatus = ERROR_INVALID_PRINTER_NAME, ;
"Invalid Printer name", STR (nStatus) )
RETURN (cStatus)
#pragma BEGINDUMP
#include <Windows.h>
#include <HbApi.h>
HB_FUNC ( PRINTERSTATUS ) // cPrinter or cPrinterServer --> nStatus
{
HANDLE hPrinter = NULL;
DWORD cBytesNeeded = 0, cBytesUsed = 0, pstatus = -1;
PRINTER_INFO_2 * pPrinterInfo = NULL;
if( OpenPrinter( hb_parc( 1 ), &hPrinter, NULL ) )
{
GetPrinter( hPrinter, 2, NULL, 0, &cBytesNeeded );
pPrinterInfo = ( PRINTER_INFO_2 * ) hb_xgrab( cBytesNeeded );
//cBytesUsed = cBytesNeeded;
GetPrinter( hPrinter, 2, ( unsigned char * ) pPrinterInfo, cBytesNeeded, &cBytesUsed );
pstatus = (pPrinterInfo->Status) ;
hb_retnl( pPrinterInfo->Status ) ;
hb_xfree( pPrinterInfo );
ClosePrinter( hPrinter );
}
else
hb_retnl( GetLastError() ); // return error code if Openprinter() fails
}
Return to FiveWin for Harbour/xHarbour
Users browsing this forum: No registered users and 90 guests