Freigeben über


WritePrinter-Funktion

Die WritePrinter-Funktion benachrichtigt den Druckspooler, dass Daten in den angegebenen Drucker geschrieben werden sollen.

Hinweis

WritePrinter unterstützt nur GDI-Druck und darf nicht für XPS-Druck verwendet werden. Wenn Ihr Druckauftrag xpS oder den 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
);

Die Parameter

hPrinter [in]

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

pBuf [in]

Ein Zeiger auf ein Bytearray, das die Daten enthält, die auf den Drucker geschrieben werden sollen.

cbBuf [in]

Die Größe des Arrays in Byte.

pcWritten [out]

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

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Wert ungleich Null.

Wenn die Funktion fehlschlägt, 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ückgegeben wird, hängt von Laufzeitfaktoren wie Netzwerkstatus, Druckserverkonfiguration und Implementierungsfaktoren des Druckertreibers ab, die beim Schreiben einer Anwendung schwer vorhergesagt werden können. Das Aufrufen dieser Funktion über einen Thread, der die Interaktion mit der Benutzeroberfläche verwaltet, kann dazu führen, dass die Anwendung scheinbar nicht reagiert.

Die Reihenfolge für einen Druckauftrag lautet wie folgt:

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

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 wird, 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 , die im pDocInfo-Parameter des StartDocPrinter-Aufrufs übergeben wurde, "RAW" ist, die Einstellungen für druckauftrags im DEVMODE-Stil in der von der Hardware verstandenen Sprache vollständig beschreiben.

In Windows-Versionen vor Windows XP kann es nicht gedruckt werden, wenn eine Seite in einer spoolierten Datei ca. 350 MB überschreitet. Dies kann beispielsweise beim Drucken großer EMF-Dateien auftreten. Der Grenzwert für die Seitengröße in Versionen von Windows vor Windows XP hängt von vielen Faktoren ab, einschließlich der verfügbaren Menge des virtuellen Speichers, der Menge an Arbeitsspeicher, die durch Aufrufen von Prozessen zugewiesen wird, und der Menge der Fragmentierung im Prozesshap. In Windows XP und höheren Versionen von Windows müssen EMF-Dateien 2 GB oder weniger groß sein. Wenn WritePrinter verwendet wird, um nicht EMF-Daten zu schreiben, z. B. druckerbereite PDL, ist die Größe der Datei nur durch den verfügbaren Speicherplatz begrenzt.

Beispiele

Ein Beispielprogramm, das diese Funktion verwendet, finden Sie unter How To: Print Using the GDI Print API.

Anforderungen

Anforderung Wert
Mindest unterstützter Client
Windows 2000 Professional [nur Desktop-Apps]
Unterstützter Server (Mindestversion)
Windows 2000 Server [nur Desktop-Apps]
Kopfzeile
Winspool.h (enthalten Windows.h)
Bibliothek
Winspool.lib
DLL
Spoolss.dll

Siehe auch

Drucken

Drucken von Spooler-API-Funktionen

EndDocPrinter-

EndeSeiteDrucker

OpenPrinter-

StartDocPrinter-

StartSeiteDrucker