Condividi tramite


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
Winspool.h (include Windows.h)
Libreria
Winspool.lib
DLL
Spoolss.dll
Nomi Unicode e ANSI
OpenPrinter2W (Unicode) e OpenPrinter2A (ANSI)

Vedi anche

Stampa

Funzioni dell'API spooler di stampa

ClosePrinter

PRINTER_DEFAULTS

PRINTER_OPTIONS

SetJob

Setprinter

StartDocPrinter

OpenPrinter