Jump to content

SplRegister: Difference between revisions

From EDM2
Created page with "This function allows applications to register for notification of events about printers. This function may be used for job accounting purposes or by printer drivers to keep aw..."
 
Ak120 (talk | contribs)
mNo edit summary
 
Line 1: Line 1:
This function allows applications to register for notification of events about printers. This function may be used for job accounting purposes or by printer drivers to keep aware of the operation of the print subsystem.  
This function allows applications to register for notification of events about printers. This function may be used for job accounting purposes or by printer drivers to keep aware of the operation of the print subsystem.


== Syntax ==  
== Syntax ==  
  SplRegister(pszComputerName, pszName,
SplRegister(pszComputerName, pszName,
       hwndNotify, ulCategory, ulType, pulHandle);
       hwndNotify, ulCategory, ulType, pulHandle);


== Parameters ==
== Parameters ==
; pszComputerName (PSZ) - input  
;pszComputerName (PSZ) - input:Printer server name to register for alert notification.
:Printer server name to register for alert notification.  
:The field is used by an application running on a client machine to register for alerts on a print server. To register locally, this field must be NULL.
 
;pszName (PSZ) - input:Case-sensitive name of printer port to register for alerts.
:The field is used by an application running on a client machine to register for alerts on a print server. To register locally, this field must be NULL.  
:This value can be a virtual port name.
 
;hwndNotify (HWND) - input:Window handle to get notify messages.
;pszName (PSZ) - input  
:The message posted is as follows:
:Case-sensitive name of printer port to register for alerts.  
::Message ID is WM_SPOOLER_ALERT(0x00d8)
 
:This value can be a virtual port name.  
 
;hwndNotify (HWND) - input  
:Window handle to get notify messages.  
 
:The message posted is as follows:  
 
:Message ID is WM_SPOOLER_ALERT(0x00d8)
 
:MP1 will define the type of alert as follows:  
:MP1 will define the type of alert as follows:  
<pre>
<pre>
Line 33: Line 23:
#define SPLMSG_EXTENDED_TYPE_MASK    0xFF00
#define SPLMSG_EXTENDED_TYPE_MASK    0xFF00
</pre>
</pre>
:If the object type is SPLMSG_EXTENDED_ALERT, then this is an extended alert. The extended alert category is SHORT2FROMMP(MP1). The type of alert in the given extended alert category is SHORT1FROMMP(MP1) bits 8-15. This limits the notification given to applications registered for extended alerts to only the specific categories that are 0xFFFF or less and to only category types that are 0xFF or less.  
:If the object type is SPLMSG_EXTENDED_ALERT, then this is an extended alert. The extended alert category is SHORT2FROMMP(MP1). The type of alert in the given extended alert category is SHORT1FROMMP(MP1) bits 8-15. This limits the notification given to applications registered for extended alerts to only the specific categories that are 0xFFFF or less and to only category types that are 0xFF or less.  


:If the object type is SPLMSG_SPECIAL_ALERT, then this is a special alert generated by the spooler and SHORT2FROMMP(MP1) will contain one of the following messages:  
:If the object type is SPLMSG_SPECIAL_ALERT, then this is a special alert generated by the spooler and SHORT2FROMMP(MP1) will contain one of the following messages:
 
:;SPLMSG_CONNECTION_LOST - 0x0002:Connection to computer terminated; all alerts disabled for given computer.
:;SPLMSG_CONNECTION_LOST - 0x0002  
:;SPLMSG_PORT_TERMINATED - 0x0003:Registration terminated for port.
::Connection to computer terminated; all alerts disabled for given computer.  
:;SPLMSG_SPOOLER_DISABLED - 0x0001:Spooler disabled; all alerts for given computer are disabled.
 
:;SPLMSG_PORT_TERMINATED - 0x0003  
::Registration terminated for port.  
 
:;SPLMSG_SPOOLER_DISABLED - 0x0001  
::Spooler disabled; all alerts for given computer are disabled.  
 
:If the object type is less than SPLMSG_SPECIAL_ALERT(0xFC), then this is a core alert. The specific core alert posted will be:  SHORT1FROMMP(MP1) bits 0-7(SPLMSG_CORE_ALERT_MASK)
:If the object type is less than SPLMSG_SPECIAL_ALERT(0xFC), then this is a core alert. The specific core alert posted will be:  SHORT1FROMMP(MP1) bits 0-7(SPLMSG_CORE_ALERT_MASK)
: If the core alert is PRTALERT_TYPE_PAGE_PRINTED(9), then SHORT1FROMMP(MP1) bits 8-15(SPLMSG_PAGE_PRINTED_MASK) will be the page number printed. If the page number is above 255, the value hex 'FF' will be put in this byte field.  
: If the core alert is PRTALERT_TYPE_PAGE_PRINTED(9), then SHORT1FROMMP(MP1) bits 8-15(SPLMSG_PAGE_PRINTED_MASK) will be the page number printed. If the page number is above 255, the value hex 'FF' will be put in this byte field.  


Line 54: Line 35:


:The core alert type will be one of the following:  
:The core alert type will be one of the following:  
 
::{|class="wikitable"
Value Description  
!Bit||Description
 
|-
1 PRTALERT_TYPE_INPUT  
|1||PRTALERT_TYPE_INPUT Input alert (Example: out of paper).
Input alert (Example: out of paper).  
|-
 
|2||PRTALERT_TYPE_OUTPUT Output alert (Example: output bin full).
2 PRTALERT_TYPE_OUTPUT  
|-
Output alert (Example: output bin full).  
|3||PRTALERT_TYPE_JAM Paper jam alert.  
 
|-
3 PRTALERT_TYPE_JAM  
|4||PRTALERT_TYPE_OPERATOR Operator intervention required (Example: print ribbon jam).
Paper jam alert.  
|-
 
|5||PRTALERT_TYPE_CONFIG_CHANGE Configuration changed (Example: cartridge removed).
4 PRTALERT_TYPE_OPERATOR  
|-
Operator intervention required (Example: print ribbon jam).  
|6||PRTALERT_TYPE_SUPPLIES Supplies alert (Example: out of toner).
 
|-
5 PRTALERT_TYPE_CONFIG_CHANGE  
|7||PRTALERT_TYPE_JOB_START Job started printing.  
Configuration changed (Example: cartridge removed).  
|-
 
|8||PRTALERT_TYPE_JOB_STACKED Job completed and stacked.
6 PRTALERT_TYPE_SUPPLIES Supplies alert (Example: out of toner).  
|-
 
|9||PRTALERT_TYPE_PAGE_PRINTED Page printed.
7 PRTALERT_TYPE_JOB_START  
|-
Job started printing.  
|10||PRTALERT_TYPE_JOB_CANCELLED Job cancelled inside printer.
 
|-
8 PRTALERT_TYPE_JOB_STACKED  
|11||PRTALERT_TYPE_JOB_HELD Job held inside printer.
Job completed and stacked.  
|-
 
|12||PRTALERT_TYPE_COVER_OPEN Cover or panel open.
9 PRTALERT_TYPE_PAGE_PRINTED  
|-
Page printed.  
|13||PRTALERT_TYPE_POWER_ON Printer powered on.
 
|-
10 PRTALERT_TYPE_JOB_CANCELLED  
|14||PRTALERT_TYPE_RESET Printer reset.
Job cancelled inside printer.  
|-
 
|15||PRTALERT_TYPE_ONLINE Printer now online.  
11 PRTALERT_TYPE_JOB_HELD  
|-
Job held inside printer.  
|16||PRTALERT_TYPE_OFFLINE Printer now offline.
 
|-
12 PRTALERT_TYPE_COVER_OPEN  
|17||PRTALERT_TYPE_TIMED_ALERT Timed alert.
Cover or panel open.  
|-
 
|18||PRTALERT_TYPE_COMMUNICATION_PROBLEM Communication problem.
13 PRTALERT_TYPE_POWER_ON  
|-
Printer powered on.  
|19||PRTALERT_TYPE_COMM_STATUS_CHANGED Communication status changed. BIDI_Q_PORT should be issued to get current state.
 
|-
14 PRTALERT_TYPE_RESET  
|0xFF||PRTALERT_TYPE_OTHER Other alert type (0xFFFFFFFF).
Printer reset.  
|}
 
:The severity of the problem will be one of the following:  
15 PRTALERT_TYPE_ONLINE  
::{|class="wikitable"
Printer now online.  
!Value||Description
 
|-
16 PRTALERT_TYPE_OFFLINE  
|00||PRTALERT_SEV_INFORMATIONAL
Printer now offline.  
|-
 
|01||PRTALERT_SEV_WARNING
17 PRTALERT_TYPE_TIMED_ALERT  
|-
Timed alert.  
|02||PRTALERT_SEV_ERROR Printing stopped due to error.  
 
|-
18 PRTALERT_TYPE_COMMUNICATION_PROBLEM  
|03||PRTALERT_SEV_SERVICE Service is required.  
Communication problem.  
|-
 
|04||FD Reserved  
19 PRTALERT_TYPE_COMM_STATUS_CHANGED  
|-
Communication status changed. BIDI_Q_PORT should be issued to get current state.  
|FE||PRTALERT_SEV_OTHER Other (0xFE)  
 
|-
0xFF PRTALERT_TYPE_OTHER  
|FF||PRTALERT_SEV_UNKNOWN Unknown (0xFF)  
Other alert type (0xFFFFFFFF).  
|}
 
The severity of the problem will be one of the following:  
 
Value Description  
 
00 PRTALERT_SEV_INFORMATIONAL  
 
01 PRTALERT_SEV_WARNING  
 
02 PRTALERT_SEV_ERROR  
Printing stopped due to error.  
 
03 PRTALERT_SEV_SERVICE  
Service is required.  
 
04 - FD Reserved  
 
FE PRTALERT_SEV_OTHER  
Other (0xFE)  
 
FF PRTALERT_SEV_UNKNOWN  
Unknown (0xFF)  
 
:'''MP2''' contents are as follows:  
:'''MP2''' contents are as follows:  
:SHORT1FROMMP(MP1) is the atomized print server name.
:SHORT1FROMMP(MP1) is the atomized print server name.
Line 162: Line 120:
If the protocol converter does not support the given category, ERROR_INVALID_CATEGORY(117) is returned.  
If the protocol converter does not support the given category, ERROR_INVALID_CATEGORY(117) is returned.  


; ulType (ULONG) - input  
;ulType (ULONG) - input: Type of alert to enable for the given category.
: Type of alert to enable for the given category.  
:If the category is PRTALERT_CATEGORY_CORE, this is a bit-field that defines the additional core alerts to enable. The core alerts corresponding to the bits set in the ulType field will be enabled, in addition to any currently enabled core alerts. If the protocol converter does not understand one of the bits that are set, ERROR_INVALID_FLAG_NUMBER(186) should be returned.
 
:If the printer is not capable of setting one of the core alerts whose bit is set, and if any core alerts can be enabled, a Success return code should be returned.
If the category is PRTALERT_CATEGORY_CORE, this is a bit-field that defines the additional core alerts to enable. The core alerts corresponding to the bits set in the ulType field will be enabled, in addition to any currently enabled core alerts. If the protocol converter does not understand one of the bits that are set, ERROR_INVALID_FLAG_NUMBER(186) should be returned.  
:If the category is not PRTALERT_CATEGORY_CORE, then this is a value that defines the specific extended alert to enable.
 
:Bit defintions for core alerts are as follows:
If the printer is not capable of setting one of the core alerts whose bit is set, and if any core alerts can be enabled, a Success return code should be returned.  
::{|class="wikitable"
 
!Bit||Description
If the category is not PRTALERT_CATEGORY_CORE, then this is a value that defines the specific extended alert to enable.  
|-
 
|0||PRTALERT_CORE_INPUT - 0x00000001 Input alert (Example: out of paper).
Bit defintions for core alerts are as follows:  
|-
 
|1||PRTALERT_CORE_OUTPUT - 0x00000002 Output alert (Example: output bin is full).
Bit Description  
|-
 
|2||PRTALERT_CORE_JAM - 0x00000004 Paper jam alert.
0 PRTALERT_CORE_INPUT - 0x00000001  
|-
Input alert (Example: out of paper).  
|3||PRTALERT_CORE_OPERATOR - 0x00000008 Operator intervention required (Example: print ribbon jam).
 
|-
1 PRTALERT_CORE_OUTPUT - 0x00000002  
|4||PRTALERT_CORE_CONFIG_CHANGE - 0x00000010 Configuration changed (Example: cartridge removed).
Output alert (Example: output bin is full).  
|-
 
|5||PRTALERT_CORE_SUPPLIES - 0x00000020 Supplies alert (Example: out of toner).
2 PRTALERT_CORE_JAM - 0x00000004  
|-
Paper jam alert.  
|6||PRTALERT_CORE_JOB_START - 0x00000040 Job started printing.
 
|-
3 PRTALERT_CORE_OPERATOR - 0x00000008  
|7||PRTALERT_CORE_JOB_STACKED - 0x00000080 Job completed and stacked.
Operator intervention required (Example: print ribbon jam).  
|-
 
|8||PRTALERT_CORE_PAGE_PRINTED - 0x00000100 Page printed.
4 PRTALERT_CORE_CONFIG_CHANGE - 0x00000010  
|-
Configuration changed (Example: cartridge removed).  
|9||PRTALERT_CORE_JOB_CANCELLED - 0x00000200 Job cancelled inside printer.
 
|-
5 PRTALERT_CORE_SUPPLIES - 0x00000020  
|10||PRTALERT_CORE_JOB_HELD - 0x00000400 Job held inside printer.  
Supplies alert (Example: out of toner).  
|-
 
|11||PRTALERT_CORE_COVER_OPEN - 0x00000800 Cover or panel open.
6 PRTALERT_CORE_JOB_START - 0x00000040  
|-
Job started printing.  
|12||PRTALERT_CORE_POWER_ON - 0x00001000 Printer powered on.
 
|-
7 PRTALERT_CORE_JOB_STACKED - 0x00000080  
|13||PRTALERT_CORE_RESET - 0x00002000 Printer reset.
Job completed and stacked.  
|-
 
|14||PRTALERT_CORE_ONLINE - 0x00004000 Printer now online.
8 PRTALERT_CORE_PAGE_PRINTED - 0x00000100  
|-
Page printed.  
|15||PRTALERT_CORE_OFFLINE - 0x00008000 Printer now offline.
 
|-
9 PRTALERT_CORE_JOB_CANCELLED - 0x00000200  
|16||PRTALERT_CORE_TIMED_ALERT - 0x00010000 Timed alert.
Job cancelled inside printer.  
|-
 
|17||PRTALERT_CORE_COMMUNICATION_PROBLEM - 0x00020000 Communication problem.  
10 PRTALERT_CORE_JOB_HELD - 0x00000400  
|-
Job held inside printer.  
|18||PRTALERT_CORE_COMM_STATUS_CHANGED - 0x00040000 Communication status changed.  
 
|}
11 PRTALERT_CORE_COVER_OPEN - 0x00000800  
;pulHandle (PULONG) - in/out: Pointer to spooler alert handle.
Cover or panel open.  
:For initial registration, the value pointed to by this parameter should be 0 (zero). If an application wants to make better use of spooler resources, the application can use the same returned spooler handle for all of its alert registration.
 
12 PRTALERT_CORE_POWER_ON - 0x00001000  
Printer powered on.  
 
13 PRTALERT_CORE_RESET - 0x00002000  
Printer reset.  
 
14 PRTALERT_CORE_ONLINE - 0x00004000  
Printer now online.  
 
15 PRTALERT_CORE_OFFLINE - 0x00008000  
Printer now offline.  
 
16 PRTALERT_CORE_TIMED_ALERT - 0x00010000  
Timed alert.  
 
17 PRTALERT_CORE_COMMUNICATION_PROBLEM - 0x00020000  
Communication problem.  
 
18 PRTALERT_CORE_COMM_STATUS_CHANGED - 0x00040000  
Communication status changed.  
 
; pulHandle (PULONG) - in/out  
: Pointer to spooler alert handle.  
 
:For initial registration, the value pointed to by this parameter should be 0 (zero). If an application wants to make better use of spooler resources, the application can use the same returned spooler handle for all of its alert registration.  


== Returns ==
== Returns ==
; rc (ULONG) - returns : Return codes.  
;rc (ULONG) - returns : Return codes.
 
*0 Success
*0 Success  
*ERROR_INVALID_CATEGORY(117) :The protocol converter does not support the extended alert category.
 
*ERROR_INVALID_FLAG_NUMBER(186) :The protocol converter did not understand a core alert that was set.  
*ERROR_INVALID_CATEGORY(117)  
*ERROR_INVALID_HANDLE(6) :The value pointed to by pulHandle is not a valid spooler alert handle. The value at *pulHandle should be set to 0 (zero) to allocate a new spooler alert handle.
:The protocol converter does not support the extended alert category.  
*ERROR_INVALID_PARAMETER(87) :An invalid buffer given.  
 
*ERROR_NOT_SUPPORTED(50) :The spooler on the given print server cannot support alert notification.
*ERROR_INVALID_FLAG_NUMBER(186)  
*PMERR_SPL_SPOOLER_NOT_INSTALLED(0x4009) :The spooler is not enabled.
:The protocol converter did not understand a core alert that was set.  
 
*ERROR_INVALID_HANDLE(6)  
:The value pointed to by pulHandle is not a valid spooler alert handle. The value at *pulHandle should be set to 0 (zero) to allocate a new spooler alert handle.  
 
*ERROR_INVALID_PARAMETER(87)  
:An invalid buffer given.  
 
*ERROR_NOT_SUPPORTED(50)  
:The spooler on the given print server cannot support alert notification.  
 
*PMERR_SPL_SPOOLER_NOT_INSTALLED(0x4009)  
:The spooler is not enabled.  
 


== Sample ==
== Sample ==
Line 277: Line 195:
rc = SplRegister(pszComputerName, pszName,
rc = SplRegister(pszComputerName, pszName,
       hwndNotify, ulCategory, ulType, pulHandle);
       hwndNotify, ulCategory, ulType, pulHandle);
</pre>
</pre>


== Remarks ==
== Remarks ==
'''Note:''' Registration is not maintained across reboots.


'''Note:''' Registration is not maintained across reboots.
Any new registration is in addition to existing registration(s) for the spooler handle passed in (if any handle was passed).
 
Any new registration is in addition to existing registration(s) for the spooler handle passed in (if any handle was passed).
 
To remove registration, use SplUnRegister.
 
For each spooler alert handle, only the last hwndNotify passed in with the alert handle will be posted with alert messages.  


That is, if you register window handle X and receive alert handle 1, then register for more alerts using window handle Y and alert handle 1, window handle Y will get alerts for alert handle 1, but window handle X will not get any alert messages.  
To remove registration, use SplUnRegister.


Registration for alerts from a client on a print server requires that the user logged onto the client have authority to open a named pipe on the server. This access is normally granted to those users who have access to the print queue on a server.  
For each spooler alert handle, only the last hwndNotify passed in with the alert handle will be posted with alert messages.


That is, if you register window handle X and receive alert handle 1, then register for more alerts using window handle Y and alert handle 1, window handle Y will get alerts for alert handle 1, but window handle X will not get any alert messages.


Registration for alerts from a client on a print server requires that the user logged onto the client have authority to open a named pipe on the server. This access is normally granted to those users who have access to the print queue on a server.


[[Category:Spl]]
[[Category:Spl]]

Latest revision as of 18:41, 12 December 2019

This function allows applications to register for notification of events about printers. This function may be used for job accounting purposes or by printer drivers to keep aware of the operation of the print subsystem.

Syntax

SplRegister(pszComputerName, pszName,
      hwndNotify, ulCategory, ulType, pulHandle);

Parameters

pszComputerName (PSZ) - input
Printer server name to register for alert notification.
The field is used by an application running on a client machine to register for alerts on a print server. To register locally, this field must be NULL.
pszName (PSZ) - input
Case-sensitive name of printer port to register for alerts.
This value can be a virtual port name.
hwndNotify (HWND) - input
Window handle to get notify messages.
The message posted is as follows:
Message ID is WM_SPOOLER_ALERT(0x00d8)
MP1 will define the type of alert as follows:
/* Alert type - SHORT1FROMMP(MP1) bits 0-7 */
#define SPLMSG_SPECIAL_ALERT          0x00FC
#define SPLMSG_EXTENDED_ALERT         0x00FD
#define SPLMSG_CORE_ALERT_MASK        0x00FF

/* Extended alert type - SHORT1FROMMP(MP1) bits 8-15 */
#define SPLMSG_EXTENDED_TYPE_MASK     0xFF00
If the object type is SPLMSG_EXTENDED_ALERT, then this is an extended alert. The extended alert category is SHORT2FROMMP(MP1). The type of alert in the given extended alert category is SHORT1FROMMP(MP1) bits 8-15. This limits the notification given to applications registered for extended alerts to only the specific categories that are 0xFFFF or less and to only category types that are 0xFF or less.
If the object type is SPLMSG_SPECIAL_ALERT, then this is a special alert generated by the spooler and SHORT2FROMMP(MP1) will contain one of the following messages:
SPLMSG_CONNECTION_LOST - 0x0002
Connection to computer terminated; all alerts disabled for given computer.
SPLMSG_PORT_TERMINATED - 0x0003
Registration terminated for port.
SPLMSG_SPOOLER_DISABLED - 0x0001
Spooler disabled; all alerts for given computer are disabled.
If the object type is less than SPLMSG_SPECIAL_ALERT(0xFC), then this is a core alert. The specific core alert posted will be: SHORT1FROMMP(MP1) bits 0-7(SPLMSG_CORE_ALERT_MASK)
If the core alert is PRTALERT_TYPE_PAGE_PRINTED(9), then SHORT1FROMMP(MP1) bits 8-15(SPLMSG_PAGE_PRINTED_MASK) will be the page number printed. If the page number is above 255, the value hex 'FF' will be put in this byte field.
If the core alert is not PRTALERT_TYPE_PAGE_PRINTED(9), then SHORT1FROMMP(MP1) bits 8-15(SPLMSG_CORE_SEVERITY_MASK) will be the severity of the alert. SHORT2FROMMP(MP1) will be the spooler job ID if this is a core alert for a print job.
The core alert type will be one of the following:
Bit Description
1 PRTALERT_TYPE_INPUT Input alert (Example: out of paper).
2 PRTALERT_TYPE_OUTPUT Output alert (Example: output bin full).
3 PRTALERT_TYPE_JAM Paper jam alert.
4 PRTALERT_TYPE_OPERATOR Operator intervention required (Example: print ribbon jam).
5 PRTALERT_TYPE_CONFIG_CHANGE Configuration changed (Example: cartridge removed).
6 PRTALERT_TYPE_SUPPLIES Supplies alert (Example: out of toner).
7 PRTALERT_TYPE_JOB_START Job started printing.
8 PRTALERT_TYPE_JOB_STACKED Job completed and stacked.
9 PRTALERT_TYPE_PAGE_PRINTED Page printed.
10 PRTALERT_TYPE_JOB_CANCELLED Job cancelled inside printer.
11 PRTALERT_TYPE_JOB_HELD Job held inside printer.
12 PRTALERT_TYPE_COVER_OPEN Cover or panel open.
13 PRTALERT_TYPE_POWER_ON Printer powered on.
14 PRTALERT_TYPE_RESET Printer reset.
15 PRTALERT_TYPE_ONLINE Printer now online.
16 PRTALERT_TYPE_OFFLINE Printer now offline.
17 PRTALERT_TYPE_TIMED_ALERT Timed alert.
18 PRTALERT_TYPE_COMMUNICATION_PROBLEM Communication problem.
19 PRTALERT_TYPE_COMM_STATUS_CHANGED Communication status changed. BIDI_Q_PORT should be issued to get current state.
0xFF PRTALERT_TYPE_OTHER Other alert type (0xFFFFFFFF).
The severity of the problem will be one of the following:
Value Description
00 PRTALERT_SEV_INFORMATIONAL
01 PRTALERT_SEV_WARNING
02 PRTALERT_SEV_ERROR Printing stopped due to error.
03 PRTALERT_SEV_SERVICE Service is required.
04 FD Reserved
FE PRTALERT_SEV_OTHER Other (0xFE)
FF PRTALERT_SEV_UNKNOWN Unknown (0xFF)
MP2 contents are as follows:
SHORT1FROMMP(MP1) is the atomized print server name.
If the notification is from the local spooler, this value will be zero.
SHORT2FROMMP(MP2) is the atomized print queue name when the message involves a print job (alert values 7 - 11);
otherwise, it will be the atomized printer port name, if applicable.


ulCategory (ULONG) - input
Category of alert to register.
This value can be the core alert category or an extended alert category as defined below:

PRTALERT_CATEGORY_CORE - 0x00000001 Core alert category

PRTALERT_CATEGORY_EXTENDED - 0x0000D000 Beginning of the extended alert categories. Protocol converters should limit the category range to between 0x0000D000 and 0x0000DFFFF.

PRTALERT_CATEGORY_EXT_MAX - 0x0000DFFF End of the extended alert categories.

If the protocol converter does not support the given category, ERROR_INVALID_CATEGORY(117) is returned.

ulType (ULONG) - input
Type of alert to enable for the given category.
If the category is PRTALERT_CATEGORY_CORE, this is a bit-field that defines the additional core alerts to enable. The core alerts corresponding to the bits set in the ulType field will be enabled, in addition to any currently enabled core alerts. If the protocol converter does not understand one of the bits that are set, ERROR_INVALID_FLAG_NUMBER(186) should be returned.
If the printer is not capable of setting one of the core alerts whose bit is set, and if any core alerts can be enabled, a Success return code should be returned.
If the category is not PRTALERT_CATEGORY_CORE, then this is a value that defines the specific extended alert to enable.
Bit defintions for core alerts are as follows:
Bit Description
0 PRTALERT_CORE_INPUT - 0x00000001 Input alert (Example: out of paper).
1 PRTALERT_CORE_OUTPUT - 0x00000002 Output alert (Example: output bin is full).
2 PRTALERT_CORE_JAM - 0x00000004 Paper jam alert.
3 PRTALERT_CORE_OPERATOR - 0x00000008 Operator intervention required (Example: print ribbon jam).
4 PRTALERT_CORE_CONFIG_CHANGE - 0x00000010 Configuration changed (Example: cartridge removed).
5 PRTALERT_CORE_SUPPLIES - 0x00000020 Supplies alert (Example: out of toner).
6 PRTALERT_CORE_JOB_START - 0x00000040 Job started printing.
7 PRTALERT_CORE_JOB_STACKED - 0x00000080 Job completed and stacked.
8 PRTALERT_CORE_PAGE_PRINTED - 0x00000100 Page printed.
9 PRTALERT_CORE_JOB_CANCELLED - 0x00000200 Job cancelled inside printer.
10 PRTALERT_CORE_JOB_HELD - 0x00000400 Job held inside printer.
11 PRTALERT_CORE_COVER_OPEN - 0x00000800 Cover or panel open.
12 PRTALERT_CORE_POWER_ON - 0x00001000 Printer powered on.
13 PRTALERT_CORE_RESET - 0x00002000 Printer reset.
14 PRTALERT_CORE_ONLINE - 0x00004000 Printer now online.
15 PRTALERT_CORE_OFFLINE - 0x00008000 Printer now offline.
16 PRTALERT_CORE_TIMED_ALERT - 0x00010000 Timed alert.
17 PRTALERT_CORE_COMMUNICATION_PROBLEM - 0x00020000 Communication problem.
18 PRTALERT_CORE_COMM_STATUS_CHANGED - 0x00040000 Communication status changed.
pulHandle (PULONG) - in/out
Pointer to spooler alert handle.
For initial registration, the value pointed to by this parameter should be 0 (zero). If an application wants to make better use of spooler resources, the application can use the same returned spooler handle for all of its alert registration.

Returns

rc (ULONG) - returns
Return codes.
  • 0 Success
  • ERROR_INVALID_CATEGORY(117) :The protocol converter does not support the extended alert category.
  • ERROR_INVALID_FLAG_NUMBER(186) :The protocol converter did not understand a core alert that was set.
  • ERROR_INVALID_HANDLE(6) :The value pointed to by pulHandle is not a valid spooler alert handle. The value at *pulHandle should be set to 0 (zero) to allocate a new spooler alert handle.
  • ERROR_INVALID_PARAMETER(87) :An invalid buffer given.
  • ERROR_NOT_SUPPORTED(50) :The spooler on the given print server cannot support alert notification.
  • PMERR_SPL_SPOOLER_NOT_INSTALLED(0x4009) :The spooler is not enabled.

Sample

#define INCL_SPL
#define INCL_SPLBIDI
#include <os2.h>

PSZ       pszComputerName;  /*  Printer server name to register for alert notification. */
PSZ       pszName;          /*  Case-sensitive name of printer port to register for alerts. */
HWND      hwndNotify;       /*  Window handle to get notify messages. */
ULONG     ulCategory;       /*  Category of alert to register. */
ULONG     ulType;           /*  Type of alert to enable for the given category. */
PULONG    pulHandle;        /*  Pointer to spooler alert handle. */
ULONG     rc;               /*  Return codes. */

rc = SplRegister(pszComputerName, pszName,
       hwndNotify, ulCategory, ulType, pulHandle);

Remarks

Note: Registration is not maintained across reboots.

Any new registration is in addition to existing registration(s) for the spooler handle passed in (if any handle was passed).

To remove registration, use SplUnRegister.

For each spooler alert handle, only the last hwndNotify passed in with the alert handle will be posted with alert messages.

That is, if you register window handle X and receive alert handle 1, then register for more alerts using window handle Y and alert handle 1, window handle Y will get alerts for alert handle 1, but window handle X will not get any alert messages.

Registration for alerts from a client on a print server requires that the user logged onto the client have authority to open a named pipe on the server. This access is normally granted to those users who have access to the print queue on a server.