Funzione OpenPrinter2
Recupera un handle per la stampante, il server di stampa o altri tipi di handle nel sottosistema di stampa, impostando alcune delle opzioni della stampante.
Sintassi
BOOL OpenPrinter2(
_In_ LPCTSTR pPrinterName,
_Out_ LPHANDLE phPrinter,
_In_ LPPRINTER_DEFAULTS pDefault,
_In_ PPRINTER_OPTIONS pOptions
);
Parametri
-
pPrinterName [in]
-
Puntatore a una stringa costante con terminazione Null che specifica il nome della stampante o del server di stampa, l'oggetto stampante, XcvMonitor o XcvPort.
Per un oggetto stampante, utilizzare: PrinterName,Job xxxx. Per un XcvMonitor, usare: NomeServer,XcvMonitor MonitorName. Per un XcvPort, usare: NomeServer,XcvPort PortName.
Windows Vista: Se NULL, indica il server di stampa locale.
-
phPrinter [out]
-
Puntatore a una variabile che riceve un handle per la stampante aperta o l'oggetto server di stampa.
-
pDefault [in]
-
Puntatore a una struttura PRINTER_DEFAULTS . Questo valore può essere NULL.
-
pOptions [in]
-
Puntatore a una struttura PRINTER_OPTIONS . Questo valore può essere NULL.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è un valore diverso da zero.
Se la funzione ha esito negativo, il valore restituito è zero. Per informazioni sugli errori estesi, chiamare GetLastError.
Commenti
Non chiamare questo metodo in DllMain.
Nota
Si tratta di una funzione di blocco o sincrona e potrebbe non restituire immediatamente. La velocità di restituzione di questa funzione dipende da fattori di runtime come lo stato della rete, la configurazione del server di stampa e i fattori di implementazione del driver della stampante difficili da prevedere durante la scrittura di un'applicazione. Chiamando questa funzione da un thread che gestisce l'interazione con l'interfaccia utente, l'applicazione potrebbe sembrare non rispondente.
La versione ANSI di questa funzione non viene implementata e restituisce ERROR_NOT_SUPPORTED.
Il parametro pDefault consente di specificare i valori del tipo di dati e della modalità dispositivo utilizzati per la stampa di documenti inviati dalla funzione StartDocPrinter . È tuttavia possibile eseguire l'override di questi valori usando la funzione SetJob dopo l'avvio di un documento.
È possibile chiamare la funzione OpenPrinter2 per aprire un handle a un server di stampa o per determinare i diritti di accesso client a un server di stampa. A tale scopo, specificare il nome del server di stampa nel parametro pPrinterName , impostare i membri pDatatype e pDevMode della struttura PRINTER_DEFAULTS su NULL e impostare il membro DesiredAccess per specificare un valore della maschera di accesso al server, ad esempio SERVER_ALL_ACCESS. Al termine dell'handle, passarlo alla funzione ClosePrinter per chiuderla.
Utilizzare il membro DesiredAccess della struttura PRINTER_DEFAULTS per specificare i diritti di accesso necessari. I diritti di accesso possono essere uno dei seguenti.
Valore di Accesso desiderato | Significato |
---|---|
PRINTER_ACCESS_ADMINISTER | Per eseguire attività amministrative, ad esempio quelle fornite da SetPrinter. |
PRINTER_ACCESS_USE | Per eseguire operazioni di stampa di base. |
PRINTER_ALL_ACCESS | Per eseguire tutte le attività amministrative e le operazioni di stampa di base ad eccezione di SYNCHRONIZE. Vedere Diritti di accesso standard. |
PRINTER_ACCESS_MANAGE_LIMITED | Per eseguire attività amministrative, ad esempio quelle fornite da SetPrinter e SetPrinterData. Questo valore è disponibile a partire da Windows 8.1. |
valori di sicurezza generici, ad esempio WRITE_DAC | Per consentire diritti di accesso specifici di controllo. Vedere Diritti di accesso standard. |
Se un utente non dispone dell'autorizzazione per aprire una stampante o un server di stampa specificato con l'accesso desiderato, la chiamata OpenPrinter2 avrà esito negativo e GetLastError restituirà il valore ERROR_ACCESS_DENIED.
Quando pPrinterName è una stampante locale, OpenPrinter2 ignora tutti i valori dei dwFlags a cui punta la struttura PRINTER_OPTIONS a cui punta pOptions, ad eccezione di PRINTER_OPTION_CLIENT_CHANGE. Se quest'ultimo viene passato, OpenPrinter2 restituirà ERROR_ACCESS_DENIED. Di conseguenza, quando si apre una stampante locale, OpenPrinter2 non offre alcun vantaggio rispetto a OpenPrinter.
Windows Vista: I dati della stampante restituiti da OpenPrinter2 vengono recuperati da una cache locale, a meno che il flag PRINTER_OPTION_NO_CACHE non sia impostato nel campo dwFlags della struttura PRINTER_OPTIONS a cui fa riferimento pOptions.
Esempio
In questo esempio , OpenPrinter2 ha esito negativo quando PRINTER_ACCESS_MANAGE_LIMITED viene passato alla struttura PRINTER_DEFAULTS e l'utente non dispone dell'autorizzazione appropriata.
// Specify the limited management permission.
PRINTER_DEFAULTS defaults = {};
defaults.DesiredAccess = PRINTER_ACCESS_MANAGE_LIMITED;
// Open a printer to which the user has no administrative rights.
HANDLE printer = nullptr;
assert(!OpenPrinter2(L QueueWithNoAdminRights , // Queue name
&printer, // Printer handle
&defaults, // Printer defaults
nullptr)); // Printer options
assert(GetLastError() == ERROR_ACCESS_DENIED);
if (printer)
{
ClosePrinter(printer);
}
Per un programma di esempio che illustra come usare questa funzione, vedere Procedura: Stampare usando l'API di stampa GDI.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows Vista [solo app desktop] |
Server minimo supportato |
Windows Server 2008 [solo app desktop] |
Intestazione |
|
Libreria |
|
DLL |
|
Nomi Unicode e ANSI |
OpenPrinter2W (Unicode) e OpenPrinter2A (ANSI) |