VB Drucken einer WEB-Site

Wöchentlich rufe ich per VB eine Internetseite in der Firma auf und drucke die aus. Das klappte auch nach der Umstellung auf einen neuen Rechner mit Win7 und IE8 gut. Bis vor einigen wochen. Die Seite wird nun schon gedruckt, obwohl sie noch nicht fertig mit Laden ist. Es kommt eine weiße Seite aus dem Drucker. Lediglich die Fußzeile ist vorhanden.
In dem kleinen Tool haben das bisher die Zeilen

Do While Not Web1.Application.ReadyState=4
DoEvents
Loop

verhindert.
Hat jemand eine Ahnung, wie man das machen muss, damit es wieder läuft. Ich denke, dass irgendein Update des Win7 oder des IE8 daran schuld ist, dass es nicht mehr geht.

Vielen Dank.
Thomas

Ich empfehle, die Seite einfach in einen temporären Ordner mit den WebClient Objekt aus der Klasse System.Net zu laden und diese dann lokal zu drucken.

Ich empfehle, die Seite einfach in einen temporären Ordner mit
den WebClient Objekt aus der Klasse System.Net zu laden und
diese dann lokal zu drucken.

Vielen Dank für diese schnelle Antwort. Leider wird das nicht gehen, da ich VB6 im Einsatz habe. Ein Klasse System.Net ist mir da nicht bekannt. Gedruckt wird die Seite lokal. Aber eben zu früh.
Thomas

Ich meine das so:
http://www.vb-helper.com/howto_net_webclient_downloa…
Und dann drucken, wenn der Download abgeschlossen ist.

Ich meine das so:
http://www.vb-helper.com/howto_net_webclient_downloa…
Und dann drucken, wenn der Download abgeschlossen ist.

Also irgendwie schnalle ich das nicht so richtig. Ich habe hier mal den Quellcode mitbegracht. Daran wird ersichtlich, was ich tun will, ohne dass jemand irgendwas macht.

Private Sub Form_Load()
Form1.Show
Web1.Navigate „http://www.imf.org/external/np/fin/rates/sdr_ir.cfm
Do While Not Web1.Application.ReadyState = 4
DoEvents
Loop
DoEvents
Web1.Stop
DoEvents
Web1.Visible = True
Web1.SetFocus
Web1.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, 0, 0
Web1.Refresh
End Sub

Thomas

Ungetestet, aber ungefähr so

Private Sub Form_Load()
Form1.Show

Try
Dim web_client As WebClient = New WebClient

My.Computer.Network.DownloadFile(http://www.imf.org/external/np/fin/rates/sdr_ir.cfm", „Filename.htm“)

Web1.Navigate „Filename.htm“
Do While Not Web1.Application.ReadyState = 4
DoEvents
'Sleep
Loop
Web1.Visible = True
Web1.SetFocus
Web1.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, 0, 0

Catch ex As Exception
MessageBox.Show(ex.Message, „Read Error“, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try

Hallo,
der gesamte neue Text wird nun rot! Weder „Try“ noch die „DIM …“ Anweisung wird erkannt. Catch … und MessageBox … ebenso.
Ich will ja nicht unken, aber ist das VB? MessageBox kenn ich nicht nur MsgBox. Und „Catch ex As Exception“, müsste da nicht „ex“ irgenwie auch sonst im Code mal auftauchen?
Thomas

Ich rede von VB.Net, wenn du etwas anderes benutzt kann ich nicht helfen.

Ich rede von VB.Net, wenn du etwas anderes benutzt kann ich
nicht helfen.

Vielen Dank. Hatte geschrieben, dass ich VB6 benutze.
Thomas

Hallo Thomas,

ich hab zwar keine Ahnung warum du mich als Experten ausgewählt hast, da ich erstens schon ewig hier nicht mehr eingeloggt war und zweitens mit VB nichts am Hut hab. Ich war mal ein VB.Net-ler, bin aber mittlerweile zu höheren Sprachen (C++ mit QT) abgewandert.

Wenn es dich nicht stört, dass du den Quellcode nicht hast und du halt nur die .exe hast könnte ich gern versuchen dir was mit C++ zu schreiben.

MfG

Marcel

Hallo Marcel,

das wäre super und würde mir reichen. Es ist nur ein kleines Tool, welches die Arbeit der Kollegen etwas erleichtern soll.
Vielen Dank
Thomas

So, Programm ist fertig. Am besten schickst du mir mal eine PM mit deiner E-Mail Adresse, damit ich dir das .zip-Archiv schicken kann. Von dem Programm sieht man nichts, bis auf den Druckauftrag der auf dem Standartdrucker erscheint (wenn der auswählbar seien soll muss ich mich nochmal ransetzen). Die URL ist über eine "settings.ini im Programmverzeichnis bestimmbar, die sich, sollte sie nicht existieren, mit Google als Startseite erstellt.

Wenn du möchtest, kann ich dir dann den Virustotalscan gleich mitschicken (hoffe du vertraust mir auch so).

MfG

Marcel

Hi Tomas!

Ich habe leider keine Ahnung wo genau der Fehler liegt. Ich denke, dass du mit dem Update richig liegst.

Aber davon abgesehen: Ich würde dir dringend raten, das DocumentCompleted-Event für das Warten zu benutzen. Die Verwendung einer Schleife mit DoEvents halte ich in vielerlei Hinsicht für unpraktikabel. Ich denke, egal wo das Problem lag, die Verwendung des DocumentCompleted-Events dürfte es eigentlich beheben.

Falls du der Sache auf den Grund gehen willst, würde ich dir raten, einmal im laufenden Programm den Wert von wb.readystate.complete auszulesen. Eventuell ist dieser Wert gar nicht mehr 4 - unwahrscheinlich, aber möglich nach dem Update. Dann würde es das Problem beheben, wenn du einfach die Konstante benutzt.

Hoffe, ich konnte etwas helfen.

Gruß,
Alex

Hallo Alex,
vielen Dank für die Unterstützung. Welches Objekt besitz das DocumentComplete-Event? WEB1 nicht. Bitte bedenken, dass ich mit VB6 arbeite. DocumentComplete kennt es zwar (schreibt es groß/klein) aber sagt, dass das Objekt diese Eigenschaft nicht besitzt.
Thomas

Hi!

Das DocumentComplete-Event ist Teil des Web-Controls. Wenn es das bei dir nicht gibt, ist es offenbar kein Teil von VB6.

Da ich aus dem kleinen Codeabschnitt keine Fehlerquellen entnehmen kann und VB6 mir nicht so geläufig ist, würde ich dir raten das Problem zu umgehen. Du könntest beispielsweise einen Timer nutzen (seeeehr unsaubere Lösung, aber wenn’s hilft). Du würdest also eine bestimmte Zeitspanne (z.B. 30 Sekunden) warten, bevor du die Seite herunterlädst.

Wie dringend brauchst du denn das Web-Control? Ansonsten würden sich vielleicht auch noch andere Lösungen anbieten, wie zum Beispiel der Download der Datei auf den PC und das anschließende ausdrucken. Wie das mit dem Download auf VB6 läuft, weiß ich leider nicht, in .NET gibt es dazu den Webclient. Zum ausdrucken einer lokal vorliegenden HTML-Datei gibt es aber eine API, die auch in VB6 funktioniert. Dazu würde ich dir einen Blick auf diesen Artikel emfehlen:
http://www.vbarchiv.net/tipps/tipp_346-ausdruck-von-…

Wenn alle Stricke reißen, könnte man das Problem auch komplett umgehen, indem man ein externes Programm oder einen Script aufruft, der die Seite druckt. Falls du das komplette Projekt in VB6 erstellt hast, wäre es ja auch denkbar nur den Teil, der die Webseite druckt, in .NET zu schreiben und das .NET-Programm dann als externes Programm an der entsprechenden Stelle in deinem Projekt aufzurufen.

Falls die obigen Lösungswege nicht hinhauen, bräuchte ich etwas mehr Informationen. Was soll das Programm genau machen - nur diese eine Seite ausdrucken? Ist das Tool Teil eines größeren Programmes? Wird es manuell oder automatisch aufgerufen?
Und vor allem mehr Code wäre hilfreich.

Gruß,
vbfreak