Autonom eine Datei Drucken
-
Leider hilft mir die Hilfe nicht wirklich weiter. Ich kann zwar mit:
Printer()->Printers->IndexOf("FreePDF XP");
Den Druckerindex zurück bekommen jedoch weiß ich jetzt nicht genau wie ich irgendeine Datei an den Drucker schicke und den Druck anstoße. Ich habe auch schon versucht über die Kommandozeile mit print oder copy zu arbeiten, aber leider werden dann im FreePDF XP Verzeichnis keine gültigen PS Files erzeugt.
-
Hallo,
soweit ich weiß wird der Druckvorgang nicht vom Drucker sondern vom "Quellobjekt" eingeleitet. Nehmen wir also an die Datei wird vorher in einem CppWebbrowser angezeigt, dann übernimmt der CppWebbrowser den "Startbefehl"
TVariant vIn, vOut; CppWebBrowser->ControlInterface->ExecWB(Shdocvw_tlb::OLECMDID_PRINT, Shdocvw_tlb::OLECMDEXECOPT_PROMPTUSER, &vIn, &vOut);
Beim RichEdit dann entsprechend so:
RichEdit1->Print("Titel");
mfg, Micha
-
Also zur zeit Drucke ich auch genau so im CPP Browser wie du es hier beschrieben hast. Bloß halt mit
... Shdocvw_tlb::OLECMDEXECOPT_DONTPROMPTUSER, ...
Mein Problem ist halt jetzt wie definiere ich einen Drucker vor ?
-
Hallo,
ich vermute dass du nur den PrinterIndex setzen musst.
Also:
TPrinter *nPrinter = new TPrinter; nPrinter->PrinterIndex = nPrinter->Printers->IndexOf("FreePDF XP");
mfg, Micha
-
Also erst Printerindex setzten und dann im CPP Webbrowser drucken lassen geht leider nicht. (es wird weiterhin auf dem Standarddrucker gedruckt)
Wie kann ich den Standarddrucker eigentlich ändern? (bzw auslesen?) Hab hier ein Konsolenprogramm namens "SetDefaultPrinter" gefunden. Wenn ich das aufrufe bevor ich Drucke und den Namen des Druckers angebe dann klappt es wie gewünscht... aber wie gehts ohne das kleine Helferlein?
-
Hallo,
bin beim durchschauen von TPrinter gerade auf SetPrinter
Call SetPrinter to change the current printer.
und GetPrinter gestoßen
Call GetPrinter to obtain information about the current printer.
mfg, Micha!
-
Endlich hab ich's!
Zuerst liest man den Aktuellen Standarddrucker aus der Registry:
(um ihn am ende wieder zu setzten)HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows -> "Device"
danach liest man anhand des Druckernamens die Settings aus:
(bei mir zb FreePDF XP)HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices
Nun ändert man den Standarddrucker in dem man
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows -> "Device"
mit den ausgelesenen werten ersetzt. Jetzt Druckt man das Dokument zb mit:
TVariant vIn, vOut; CppWebBrowser->ControlInterface->ExecWB(Shdocvw_tlb::OLECMDID_PRINT, Shdocvw_tlb::OLECMDEXECOPT_DONTPROMPTUSER, &vIn, &vOut);
Danach setzt man wieder den Ursprünglichen Standarddrucker in der Registry.
Fertisch
-
Mhh komisch ist nun jetzt Folgendes:
Wenn ich einmal auf einen Drucker gedruckt habe dann möchte mein Programm nur noch auf diesem Drucken selbst wenn ich den Standarddrucker manuell ändere Druckt mein Programm weiterhin auf den Drucker auf den es zuerst Gedruckt hat. Wieso das denn?
-
Hallo
Ich bezweifle das es von Microsoft gedacht ist die Drucker über reine Registry-Einträge auszuwählen. Deshalb kann es sein das es einmal funktioniert, dann aber nicht mehr.
Schau lieber im WinAPI-Forum nach wie die korrekten Funktionen lauten die dafür vorgesehen sind. Diese werden sicher auch diesen Registry-Eintrag ändern, aber eben auch mehr hinter den Kulissen.bis bald
akari
-
Also nochmal ganz kurz zusammengefasst:
Ich rufe folgenden code auf um den cpp browser zu drucken:CppWebBrowser->ControlInterface->ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER);
Nur das nix anderes keine Änderungen etc. Wenn ich jetzt nach einem erfolgreichem Druck (Programm läuft noch) den Standarddrucker über Start->Drucker, dann auf den Drucker klicken ändere Druckt mein Programm weiter auf den Drucker auf den ich zuerst gedruckt habe.
Kennt jemand dieses Problem?*edit*
Selbst mit der WinAPI FunkionSetDefaultPrinter ("FreePDF XP");
tauscht er zwar den DefaultPrinter aber das Verhalten bleibt wie oben beschrieben. Ich kann also nicht auf einen anderen Drucker wechseln wärend das Programm läuft... Warum? Wenn ich übrigens mit Druckdialog Drucke und einen anderen anklicke gehts korrekt... aber das wäre ja nicht autonom.