| |

VerySource

 Forgot password?
 Register
Search
View: 766|Reply: 5

How to use vc to detect printer jam, paper shortage, and status?

[Copy link]

1

Threads

3

Posts

4.00

Credits

Newbie

Rank: 1

Credits
4.00

 China

Post time: 2020-1-27 19:20:01
| Show all posts |Read mode
How to use vc to detect printer jam, paper shortage, and status? I hope that everyone you know can help you.
Reply

Use magic Report

1

Threads

3

Posts

4.00

Credits

Newbie

Rank: 1

Credits
4.00

 China

 Author| Post time: 2020-3-3 19:00:02
| Show all posts
CDC dc;
if (! dc.CreateDC (chDriverName, chPrintName, chPort, de))
return 2002;
How to get HANDLE hPrinter printer handle via dc
Reply

Use magic Report

0

Threads

12

Posts

10.00

Credits

Newbie

Rank: 1

Credits
10.00

 China

Post time: 2020-3-4 18:15:01
| Show all posts
Take a look at the view. Several print-related events pass a few parameters, haha, I'm too lazy to help you find them.
Reply

Use magic Report

0

Threads

2

Posts

3.00

Credits

Newbie

Rank: 1

Credits
3.00

 United States

Post time: 2020-3-12 09:00:01
| Show all posts
Never heard of it, it is estimated that there is no uniform standard. The printer driver can certainly do it. The program is hard to say.

But why do you want such a function? The program only needs to know if the printer has received the data.
Reply

Use magic Report

1

Threads

3

Posts

4.00

Credits

Newbie

Rank: 1

Credits
4.00

 China

 Author| Post time: 2020-3-12 21:15:01
| Show all posts
HANDLE hPrint = dc.GetWindow ();
if (IsPrinterError (hPrint)) {
return 3;
}
BOOL IsPrinterError (HANDLE hPrinter)
{
Ranch
JOB_INFO_2 * pJobs;
int cJobs,
i;
DWORD dwPrinterStatus;
Ranch
/ *
* Get the state information for the Printer Queue and
* the jobs in the Printer Queue.
* /
if (! GetJobs (hPrinter,&pJobs,&cJobs,&dwPrinterStatus))
return FALSE;
Ranch
/ *
        * If the Printer reports an error, believe it.
* /
if (dwPrinterStatus&
(PRINTER_STATUS_ERROR |
PRINTER_STATUS_PAPER_JAM |
PRINTER_STATUS_PAPER_OUT |
PRINTER_STATUS_PAPER_PROBLEM |
PRINTER_STATUS_OUTPUT_BIN_FULL |
PRINTER_STATUS_NOT_AVAILABLE |
PRINTER_STATUS_NO_TONER |
PRINTER_STATUS_OUT_OF_MEMORY |
PRINTER_STATUS_OFFLINE |
PRINTER_STATUS_DOOR_OPEN))
{
free (pJobs);
return TRUE;
}
Ranch
/ *
* Find the Job in the Queue that is printing.
* /
for (i = 0; i <cJobs; i ++)
{
if (pJobs [i] .Status&JOB_STATUS_PRINTING)
{
/ *
* If the job is in an error state,
* report an error for the printer.
* Code could be inserted here to
* attempt an interpretation of the
* pStatus member as well.
* /
if (pJobs [i] .Status&
(JOB_STATUS_ERROR |
JOB_STATUS_OFFLINE |
JOB_STATUS_PAPEROUT |
JOB_STATUS_BLOCKED_DEVQ))
{
free (pJobs);
return TRUE;
}
}
}
Ranch
/ *
* No error condition.
* /
free (pJobs);
return FALSE;
Ranch
}

BOOL GetJobs (HANDLE hPrinter, / * Handle to the printer. * /
JOB_INFO_2 ** ppJobInfo, / * Pointer to be filled. * /
int * pcJobs, / * Count of jobs filled. * /
DWORD * pStatus) / * Print Queue status. * /
{
Ranch
DWORD cByteNeeded,
nReturned,
cByteUsed;
    JOB_INFO_2 * pJobStorage = NULL;
    PRINTER_INFO_2 * pPrinterInfo = NULL;
Ranch
/ * Get the buffer size needed. * /
if (! GetPrinter (hPrinter, 2, NULL, 0,&cByteNeeded))
{
if (GetLastError ()! = ERROR_INSUFFICIENT_BUFFER)
return FALSE;
}
Ranch
pPrinterInfo = (PRINTER_INFO_2 *) malloc (cByteNeeded);
if (! (pPrinterInfo))
/ * Failure to allocate memory. * /
return FALSE;
Ranch
/ * Get the printer information. * /
if (! GetPrinter (hPrinter,
                2,
(unsigned char *) pPrinterInfo,
cByteNeeded,
&cByteUsed))
{
/ * Failure to access the printer. * /
free (pPrinterInfo);
pPrinterInfo = NULL;
return FALSE;
}
Ranch
/ * Get job storage space. * /
if (! EnumJobs (hPrinter,
0,
pPrinterInfo-> cJobs,
                2,
NULL,
0,
(LPDWORD)&cByteNeeded,
(LPDWORD)&nReturned))
{
if (GetLastError ()! = ERROR_INSUFFICIENT_BUFFER)
{
free (pPrinterInfo);
pPrinterInfo = NULL;
return FALSE;
}
}
Ranch
pJobStorage = (JOB_INFO_2 *) malloc (cByteNeeded);
if (! pJobStorage)
{
/ * Failure to allocate Job storage space. * /
free (pPrinterInfo);
pPrinterInfo = NULL;
return FALSE;
}
Ranch
ZeroMemory (pJobStorage, cByteNeeded);
Ranch
/ * Get the list of jobs. * /
if (! EnumJobs (hPrinter,
0,
pPrinterInfo-> cJobs,
                2,
(LPBYTE) pJobStorage,
cByteNeeded,
(LPDWORD)&cByteUsed,
(LPDWORD)&nReturned))
{
free (pPrinterInfo);
free (pJobStorage);
pJobStorage = NULL;
pPrinterInfo = NULL;
return FALSE;
}
Ranch
/ *
* Return the information.
* /
* pcJobs = nReturned;
* pStatus = pPrinterInfo-> Status;
* ppJobInfo = pJobStorage;
free (pPrinterInfo);
Ranch
return TRUE;
Ranch
}
I don't know if this is right, I hope you all know what to do! !!
Reply

Use magic Report

0

Threads

2

Posts

3.00

Credits

Newbie

Rank: 1

Credits
3.00

 China

Post time: 2020-5-12 19:00:01
| Show all posts
It's too long. I'll use it again next time. Copy ~. ~
Reply

Use magic Report

You have to log in before you can reply Login | Register

Points Rules

Contact us|Archive|Mobile|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

Quick Reply To Top Return to the list