Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

  • Autor

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...

  • Autor

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...?

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.

  • Autor

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?

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...

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?

@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>

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

  • Autor

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.