OpenPrinter2-Funktion
Ruft ein Handle für den angegebenen Drucker, Druckerserver oder andere Typen von Handles im Drucksubsystem ab, während einige der Druckeroptionen festgelegt werden.
Syntax
BOOL OpenPrinter2(
_In_ LPCTSTR pPrinterName,
_Out_ LPHANDLE phPrinter,
_In_ LPPRINTER_DEFAULTS pDefault,
_In_ PPRINTER_OPTIONS pOptions
);
Parameter
-
pPrinterName [ In]
-
Ein Zeiger auf eine konstante NULL-endende Zeichenfolge, die den Namen des Druckers oder Druckerservers, des Druckerobjekts, des XcvMonitor oder des XcvPort angibt.
Verwenden Sie für ein Druckerobjekt: PrinterName, Job xxxx. Verwenden Sie für einen XcvMonitor: ServerName,XcvMonitor MonitorName. Verwenden Sie für einen XcvPort: ServerName,XcvPort PortName.
Windows Vista: Null gibt den lokalen Druckserver an.
-
phPrinter [ out]
-
Ein Zeiger auf eine Variable, die ein Handle für das geöffnete Drucker- oder Druckerserverobjekt empfängt.
-
pDefault [ In]
-
Ein Zeiger auf eine PRINTER _ DEFAULTS-Struktur. Dieser Wert kann NULL sein.
-
pOptions [ In]
-
Ein Zeiger auf eine PRINTER _ OPTIONS-Struktur. Dieser Wert kann NULL sein.
Rückgabewert
Wenn die Funktion erfolgreich ausgeführt wird, ist der Rückgabewert ein Wert ungleich 0 (null).
Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Rufen Sie getLastErrorauf, um erweiterte Fehlerinformationen zu erhalten.
Hinweise
Rufen Sie diese Methode nicht in DllMainauf.
Hinweis
Dies ist eine blockierende oder synchrone Funktion und wird möglicherweise nicht sofort zurückgegeben. Wie schnell diese Funktion zurückgegeben wird, hängt von Laufzeitfaktoren wie Netzwerkstatus, Druckerserverkonfiguration und Implementierungsfaktoren für Druckertreiber ab, die beim Schreiben einer Anwendung schwer vorherzusagen sind. Das Aufrufen dieser Funktion über einen Thread, der die Interaktion mit der Benutzeroberfläche verwaltet, kann dazu bringen, dass die Anwendung scheinbar nicht reagiert.
Die ANSI-Version dieser Funktion ist nicht implementiert und gibt ERROR _ NOT _ SUPPORTED zurück.
Mit dem pDefault-Parameter können Sie die Datentyp- und Gerätemoduswerte angeben, die zum Drucken von Dokumenten verwendet werden, die von der StartDocPrinter-Funktion übermittelt werden. Sie können diese Werte jedoch überschreiben, indem Sie die SetJob-Funktion verwenden, nachdem ein Dokument gestartet wurde.
Sie können die OpenPrinter2-Funktion aufrufen, um ein Handle für einen Druckserver zu öffnen oder Clientzugriffsrechte für einen Druckserver zu bestimmen. Geben Sie hierzu den Namen des Druckservers im pPrinterName-Parameter an, legen Sie die pDatatype- und pDevMode-Elemente der PRINTER _ DEFAULTS-Struktur auf NULL fest, und legen Sie den DesiredAccess-Member so fest, dass ein Serverzugriffsmaskenwert wie SERVER ALL ACCESS angegeben _ _ wird. Wenn Sie mit dem Handle fertig sind, übergeben Sie es an die ClosePrinter-Funktion, um es zu schließen.
Verwenden Sie den DesiredAccess-Member der PRINTER _ DEFAULTS-Struktur, um die erforderlichen Zugriffsrechte anzugeben. Die Zugriffsrechte können eine der folgenden Sein:
| Gewünschter Zugriffswert | Bedeutung |
|---|---|
| VERWALTUNG _ DES DRUCKERZUGRIFFS _ | So führen Sie administrative Aufgaben aus, z. B. die von SetPrinterbereitgestellten . |
| _VERWENDUNG DES _ DRUCKERZUGRIFFS | So führen Sie grundlegende Druckvorgänge aus. |
| PRINTER _ ALL _ ACCESS | So führen Sie alle administrativen Aufgaben und grundlegenden Druckvorgänge mit Ausnahme von SYNCHRONIZE aus. Weitere Informationen finden Sie unter Standardzugriffsrechte. |
| DRUCKERZUGRIFF _ _ EINGESCHRÄNKT VERWALTEN _ | So führen Sie administrative Aufgaben aus, z. B. die von SetPrinter und SetPrinterDatabereitgestellten . Dieser Wert ist ab Windows 8.1 verfügbar. |
| generische Sicherheitswerte, z. B. WRITE _ DAC | So lassen Sie bestimmte Zugriffsberechtigungen für die Steuerung zu. Weitere Informationen finden Sie unter Standardzugriffsrechte. |
Wenn ein Benutzer nicht über die Berechtigung zum Öffnen eines angegebenen Druckers oder Druckerservers mit dem gewünschten Zugriff verfügt, schlägt der OpenPrinter2-Aufruf fehl, und GetLastError gibt den Wert ERROR _ ACCESS _ DENIED zurück.
Wenn pPrinterName ein lokaler Drucker ist, ignoriert OpenPrinter2 alle Werte der dwFlags, auf die die PRINTER _ OPTIONS-Struktur mit pOptions zeigt, mit Ausnahme von PRINTER _ OPTION CLIENT _ _ CHANGE. Wenn letzteres übergeben wird, gibt OpenPrinter2 ERROR _ ACCESS _ DENIED zurück. Entsprechend bietet OpenPrinter2 beim Öffnen eines lokalen Druckers keinen Vorteil gegenüber OpenPrinter.
Windows Vista: Die von OpenPrinter2 zurückgegebenen Druckerdaten werden aus einem lokalen Cache abgerufen, es sei denn, das FLAG PRINTER OPTION NO _ _ _ CACHE wird im Feld dwFlags der PRINTER _ OPTIONS-Struktur festgelegt, auf die von pOptions verwiesen wird.
Beispiele
In diesem Beispiel schlägt OpenPrinter2 fehl, wenn PRINTER _ ACCESS MANAGE LIMITED an die PRINTER _ _ _ DEFAULTS-Struktur übergeben wird und der Benutzer nicht über die entsprechende Berechtigung verfügt.
// 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);
}
Ein Beispielprogramm, das die Verwendung dieser Funktion veranschaulicht, finden Sie unter Vorgehensweise: Drucken mit der GDI-Druck-API.
Anforderungen
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows [Nur Vista-Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows Nur Server [ 2008-Desktop-Apps] |
| Header |
|
| Bibliothek |
|
| DLL |
|
| Unicode- und ANSI-Name |
OpenPrinter2W (Unicode) und OpenPrinter2A (ANSI) |