Freigeben über


WritePrinter-Funktion

Die WritePrinter-Funktion benachrichtigt den Druckspooler darüber, dass Daten auf den angegebenen Drucker geschrieben werden sollen.

Hinweis

WritePrinter unterstützt nur GDI-Druck und darf nicht zum XPS-Druck verwendet werden. Wenn Ihr Druckauftrag den XPS- oder OpenXPS-Druckpfad verwendet, verwenden Sie die XPS-Druck-API. Das Senden von XPS- oder OpenXPS-Druckaufträgen an den Spooler mit WritePrinter wird nicht unterstützt und kann zu unbestimmten Ergebnissen führen.

Syntax

BOOL WritePrinter(
  _In_  HANDLE  hPrinter,
  _In_  LPVOID  pBuf,
  _In_  DWORD   cbBuf,
  _Out_ LPDWORD pcWritten
);

Parameter

hPrinter [in]

Ein Handle für den Drucker. Verwenden Sie die OpenPrinter - oder AddPrinter-Funktion , um einen Druckerhandle abzurufen.

pBuf [in]

Ein Zeiger auf ein Array von Bytes, das die Daten enthält, die in den Drucker geschrieben werden sollen.

cbBuf [in]

Die Größe des Arrays in Bytes.

pcWritten [out]

Ein Zeiger auf einen Wert, der die Anzahl der Bytes von Daten empfängt, die auf den Drucker geschrieben wurden.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Nichtzero-Wert.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null.

Bemerkungen

Hinweis

Dies ist eine blockierende oder synchrone Funktion und wird möglicherweise nicht sofort zurückgegeben. Wie schnell diese Funktion zurückgibt, hängt von Laufzeitfaktoren wie Netzwerk-status, Druckserverkonfiguration und Druckertreiberimplementierungsfaktoren ab, die beim Schreiben einer Anwendung schwer vorherzusagen sind. Wenn Sie diese Funktion über einen Thread aufrufen, der die Interaktion mit der Benutzeroberfläche verwaltet, kann die Anwendung nicht reagieren.

Die Reihenfolge für einen Druckauftrag lautet wie folgt:

  1. Um einen Druckauftrag zu starten, rufen Sie StartDocPrinter auf.
  2. Rufen Sie StartPagePrinter auf, um jede Seite zu beginnen.
  3. Um Daten auf eine Seite zu schreiben, rufen Sie WritePrinter auf.
  4. Um jede Seite zu beenden, rufen Sie EndPagePrinter auf.
  5. Wiederholen Sie 2, 3 und 4 für so viele Seiten wie nötig.
  6. Um den Druckauftrag zu beenden, rufen Sie EndDocPrinter auf.

Wenn ein allgemeines Dokument (z. B. eine Adobe PDF- oder Microsoft-Word-Datei) oder andere Druckerdaten (z. B. PCL, PS oder HPGL) direkt an einen Drucker gesendet werden, haben die im Dokument definierten Druckeinstellungen Vorrang vor den Windows-Druckeinstellungen. Dokumente werden ausgegeben, wenn der Wert des pDatatype-Members der DOC_INFO_1 Struktur, der im pDocInfo-Parameter des StartDocPrinter-Aufrufs übergeben wurde, "RAW" ist, die Druckauftragseinstellungen im DEVMODE-Stil in der von der Hardware verstandenen Sprache vollständig beschreiben muss.

Wenn in Windows-Versionen vor Windows XP eine Seite in einer Spooldatei ca. 350 MB überschreitet, kann sie nicht drucken und keine Fehlermeldung senden. Dies kann beispielsweise beim Drucken großer EMF-Dateien auftreten. Die Begrenzung der Seitengröße in Versionen von Windows vor Windows XP hängt von vielen Faktoren ab, einschließlich der Menge des verfügbaren virtuellen Arbeitsspeichers, der Menge des durch aufrufen von Prozessen zugewiesenen Arbeitsspeichers und der Fragmentierung im Prozessheap. In Windows XP und höheren Versionen von Windows müssen EMF-Dateien mindestens 2 GB groß sein. Wenn WritePrinter zum Schreiben von Nicht-EMF-Daten verwendet wird, z. B. druckerfähige PDL, wird die Größe der Datei nur durch den verfügbaren Speicherplatz begrenzt.

Beispiele

Ein Beispielprogramm, das diese Funktion verwendet, finden Sie unter Vorgehensweise: Drucken mithilfe der GDI-Druck-API.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows 2000 Server [nur Desktop-Apps]
Header
Winspool.h (einschließlich Windows.h)
Bibliothek
Winspool.lib
DLL
Spoolss.dll

Weitere Informationen

Drucken

Druckspooler-API-Funktionen

EndDocPrinter

EndPagePrinter

OpenPrinter

StartDocPrinter

StartPagePrinter

WritePrinter