Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

folgendes Problem:

Ich will den Browser im Hintergrund starten (ie) und dann die aufgerufene Seite ausdrucken und den Browser gleich wieder schließen. Das ganze in Powerbuilder aber das dürfte egal sein welche Sprache...

Das ganze funktioniert auch... aber...

wenn ich gedruckt habe kann ich den Browser nicht gleich schließen, sondern muss noch eine Schleife 10 Sekunden laufen lassen, da sonst der Druck nicht durchgeführt wird.

Das Problem ist, je nach Website und Geschwindigkeit des Rechners scheint diese Zeit länger oder kürzer zu sein.

Kann ich irgendwie abfragen ob er noch druckt oder schon fertig ist?

Hier mein bisheriger Code:

ie.visible = false

ie.navigate(sle_1.text)

DO // Warten bis Seite aufgebaut

LOOP WHILE ie.ReadyState() <> 4

ie.execwb(6, 2)

a = relativetime(now(),10)

do until a < now()

loop

//Statt diesen drei Zeilen abfragen ob druck fertig...

ie.quit()

Vielen Dank im vorraus

Geschrieben
was gibt es denn für Stati bei ie.ReadyState()?? is da keiner dabei?

typedef enum tagREADYSTATE {
READYSTATE_UNINITIALIZED = 0,
READYSTATE_LOADING = 1,
READYSTATE_LOADED = 2,
READYSTATE_INTERACTIVE = 3,
READYSTATE_COMPLETE = 4
} READYSTATE;
[/CODE]

Ich würde auch vorschlagen, in der Warteschleife mal die ReadyState-Werte anzusehen.

Geschrieben

Ready-State hat leider nach dem laden der Seite vor und nach dem Druck (und auch nach 1,2,3 bis 10 Sekunden) immer den Status 4. D.h. daran kann ich es nicht festmachen...

Geschrieben

Ich habe jetzt "ie.QueryStatusWB(6) " gefunden. Dies liefert mir aber wohl nur zurück ob das Drucken überhaupt möglich (enabled) ist (immer Rückgabewert 3).

Aber weiß jemand ob diese Funktion vielleicht mein Problem abfragen kann bzw. ich übergebe da eine 6, aber welche Werte kann man noch übergeben und vorrallem wofür stehen die...?

Geschrieben
Funktion vielleicht mein Problem abfragen kann bzw. ich übergebe da eine 6, aber welche Werte kann man noch übergeben und vorrallem wofür stehen die...?
Die MSDN Library ist dein Freund:

typedef enum  
{
OLECMDID_OPEN = 1,
OLECMDID_NEW = 2,
OLECMDID_SAVE = 3,
OLECMDID_SAVEAS = 4,
OLECMDID_SAVECOPYAS = 5,
OLECMDID_PRINT = 6,
OLECMDID_PRINTPREVIEW = 7,
OLECMDID_PAGESETUP = 8,
OLECMDID_SPELL = 9,
OLECMDID_PROPERTIES = 10,
OLECMDID_CUT = 11,
OLECMDID_COPY = 12,
OLECMDID_PASTE = 13,
OLECMDID_PASTESPECIAL = 14,
OLECMDID_UNDO = 15,
OLECMDID_REDO = 16,
OLECMDID_SELECTALL = 17,
OLECMDID_CLEARSELECTION = 18,
OLECMDID_ZOOM = 19,
OLECMDID_GETZOOMRANGE = 20
OLECMDID_UPDATECOMMANDS = 21
OLECMDID_REFRESH = 22
OLECMDID_STOP = 23
OLECMDID_HIDETOOLBARS = 24
OLECMDID_SETPROGRESSMAX = 25
OLECMDID_SETPROGRESSPOS = 26
OLECMDID_SETPROGRESSTEXT = 27
OLECMDID_SETTITLE = 28
OLECMDID_SETDOWNLOADSTATE = 29
OLECMDID_STOPDOWNLOAD = 30
} OLECMDID; [/code]

Allerdings glaube ich auch, dass dir QueryStatusWB nicht weiterhelfen wird. Im Usenet scheinen schon mehrere Leute genau dieses Problem gehabt zu haben, aber eine "schöne" Lösung hat wohl niemand gefunden. IIRC war ein Lösungansatz, die temporäre Datei zu beobachten, die der IE zum Drucken anlegt und wieder löscht, wenn er damit fertig ist.

Geschrieben

Na toll.... :)

Da hätte ich mir vom IE mehr erhofft....

Kannst du mir den sagen wie ich an die Druckdaten rangkomme, bzw. wie ich diesen Druck unter vielen Drucken identifizieren kann?

Geschrieben

Zugriff auf Hardware-Adressen

Zeiger auf Register

Bisher wurde der Blick auf den Inhalt einer Zeigervariablen immer vermieden. In der systemnahen Programmierung ist der Wert, den ein Zeiger enthält, durchaus interessant. Beispielsweise liegt das Statusregister der ersten Druckerschnittstelle bei einem gängigen Intel-PC an der Adresse 0x379. Für das normale Anwendungsprogramm ist diese Adresse unerreichbar. Wenn Sie aber eines Tages einen Treiber schreiben sollen, ist dies die Adresse, an der Sie erfahren können, ob der Drucker bereit ist, weitere Aufträge entgegenzunehmen. Der Zugriff auf die Adresse ist denkbar einfach: Sie definieren eine Zeigervariable und weisen ihr die Adresse direkt zu.

[Zugriff auf den Druckerstatus]

unsigned char *DruckerStatusRegister;

unsigned char;

DruckerStatusRegister = 0x379;

Status = *DruckerStatusRegister;

if (Status & 0%10000000)

{

// Drucker ist frei

}

else

{

// Drucker ist BUSY

}

Quelle: http://www.willemer.de/informatik/cpp/sysprog.htm

vielleicht hilft das ja schon...

Geschrieben
DruckerStatusRegister = 0x379;

Status = *DruckerStatusRegister;

Die Zeiten, zu denen man noch direkt auf die Hardwareports zugreifen konnte, sind vorbei. Moderne Betriebssysteme lassen so etwas nicht mehr zu. Zudem: wer sagt, dass der Drucker an der parallelen Schnittstelle hängt?
Geschrieben

@Klotzkopp: auf die idee bin ich gar nicht gekommen das des evtl ja ein USB oder Netzwerkdrucker oder ... oder ... sein könnte...

schade das das nicht mehr geht.... nagut, aber irgendwie muss ja auch das bs feststellen ob ein drucker druckt oder nicht, und dafür gibts doch bestimmt ne schnittstelle, aber wie hiesst sie und wie spricht man sie an?

<edit>

ich hab gern hardwarenah unter dos programmiert... :D:D:D

</edit>

Geschrieben

Möglicherweise kannst du über die Warteschlange des Druckers erkennen, ob der IE fertig ist. Sobald der Druckjob in der Warteschlange erscheint, sollte es so weit sein. Wie das genau geht, weiß ich nicht. Ich kann dir nur ein paar Stichworte liefern:

GetDefaultPrinter

OpenPrinter

EnumJobs

Geschrieben

Leider komm ich bei dem Weg über die Warteschlange des Druckers auch nicht einfach ans Ziel....

Ich habe nun mit getdefaultprintera den Drucker "gehohlt", dann die "Verbindung" mit OpenPrintera hergestellt und EnumJobsa abgefragt. Grundsätzlich ein schöner und einfacher Weg. Nun habe ich nur das Problem, das wenn ich direkt nach dem absetzten des Printkommandos im IE, den Drucker mit EnumJobsa abfrage, hat er den Druck noch nicht bekommen. Wenn ich nun in einer permanten Schleife abfrage stürzt Powerbuilder ab und wenn ich bei jedem Schleifendurchlauf kurz warte, kann es passieren, das der Druck komplett innerhalb eines Schleifendurchlaufs abgearbeitet wird und ich nicht mitbekomme, das er schon gedruckt hat....

Also suche ich gerade was wo ich sehen kann wann der letzte Druck war, bzw. einen Zähler der bei jedem Druck hochzählt oder ähnliches....

Soweit mein Stand... Wenn jemand an dieser Stelle noch eine Idee hat währe ich froh davon zu höhren....

Schöne Grüße mme

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...