Frage ist gelöstWindow per vbs erzeugen
17.09.2010
23:46:26 Uhr1559 Aufrufe
17 Antworten
23:46:26 Uhr
17 Antworten
Noch nicht bewertet
Guten Abend,
Kann man per VisualBasicScript ein leeres kleines Windowsfenster erzeugen, welches sich nach ein paar Sekunden wieder selbst schliesst? Soll als Hinweis dienen, dass mein Programm geladen wird. So ne Art Splash. Habe es mit vb.net programmiert, aber bis es erscheint, vergeht nicht weniger Zeit als bis mein Hauptprogrammfenster zu sehen ist (im Schnitt 6 bis 10 Sekunden, scheinbar braucht das Framework so lange zum Laden). Das verleitet manche Anwender, das Icon nochmal zu klicken. Ein WScript.Echo sieht man sofort. Aber da stört der Boxtitel und der OK-Button. Gibt es da eine Möglichkeit?
Danke für eine Antwort.
Norbert
Danke für eine Antwort.
Norbert
SarekHL schreibt am 18.09.2010 um 07:30:58 Uhr
Kann man per VisualBasicScript ein leeres kleines Windowsfenster erzeugen, welches sich nach ein paar Sekunden wieder selbst
schliesst? Soll als Hinweis dienen, dass mein Programm geladen wird. So ne Art Splash. Habe es mit vb.net programmiert, aber bis
es erscheint, vergeht nicht weniger Zeit als bis mein Hauptprogrammfenster zu sehen ist (im Schnitt 6 bis 10 Sekunden, scheinbar
braucht das Framework so lange zum Laden).
schliesst? Soll als Hinweis dienen, dass mein Programm geladen wird. So ne Art Splash. Habe es mit vb.net programmiert, aber bis
es erscheint, vergeht nicht weniger Zeit als bis mein Hauptprogrammfenster zu sehen ist (im Schnitt 6 bis 10 Sekunden, scheinbar
braucht das Framework so lange zum Laden).
Nein, das ist bei normalem VB ohne Framework genauso.
Wie hast Du das Fenster denn eingeblendet? Mit "Onload" des Hauptfensters?
strzata schreibt am 18.09.2010 um 09:51:44 Uhr
Habe alles versucht: erste Zeile im OnLoad, in einem OnCreateControl, als VB-Splash und im MyApplication_Startup. Die beste Lösung ist, ein Fenster als eigenes Programm unabhängig von meinem Hauptfenster. Und das möglichst nicht in .Net. Das Problem ist garantiert das Framework. Und es tritt nur auf, wenn der Rechner neu hochgefahren und noch nix weiter gestartet wurde. Wenn einmal ein Programm, welches das Framework braucht, gelaufen ist, geht alles bltzschnell. Binnen 1 Sekunde ist mein Fenster oben. Nach einem Neustart dagegen vergehen bis zu 10 Sekunden. Weil ich dachte, irgendwelche Hintergrundprozesse beim Startvorgang sind die Störenfriede, habe ich den Rechner 20 Minuten in Ruhe gelassen und dann erst das VB-Programm gestartet. Da hab ich wieder die 10 Sekunden warten müssen.
Ich suche nach einer Möglichkeit, ein kleines Fenster für 5 Sekunden in der Mitte des Desktops anzuzeigen und gehe jetzt alle Programmiersprachen durch (java, delphi, php, html, hta). Irgendwie muss das doch zu machen sein.
Danke für Deine Antwort und schöne Grüße
Norbert
Ich suche nach einer Möglichkeit, ein kleines Fenster für 5 Sekunden in der Mitte des Desktops anzuzeigen und gehe jetzt alle Programmiersprachen durch (java, delphi, php, html, hta). Irgendwie muss das doch zu machen sein.
Danke für Deine Antwort und schöne Grüße
Norbert
didi1954 schreibt am 18.09.2010 um 10:34:28 Uhr
Hallo strzata!
Ich habe mal versucht so eine Möglichkeit per VB- und Hta-Skript zu ermöglichen und scheint auch zu funktionieren.
Also das VB-Script erzeugt eine HTA-Datei, das nach der Erstellung gestartet wird und nach Ablauf der angegebenen Zeit in Sekunden wieder automatisch schließt, während das VB-Script ganz normal weiterläuft.
Hier ein VBS-Beispiel:
Wobei noch anzumerken ist, dass die Textanzeige nur funktioniert, wenn der Body-Teil an der aktuellen Position im Skript steht.
Gruß Dieter
[edit] Code geändert. Anstatt Time jetzt Now (Datum+Zeit) und Window "Mein Titel" mit Shell.AppActivate in den Vordergrund holen [/edit]
Ich habe mal versucht so eine Möglichkeit per VB- und Hta-Skript zu ermöglichen und scheint auch zu funktionieren.
Also das VB-Script erzeugt eine HTA-Datei, das nach der Erstellung gestartet wird und nach Ablauf der angegebenen Zeit in Sekunden wieder automatisch schließt, während das VB-Script ganz normal weiterläuft.
Hier ein VBS-Beispiel:
01.
Option Explicit 02.
03.
Option Explicit 04.
05.
Const BoxWidth = 300 06.
Const BoxHeight = 120 07.
08.
Const FontType = "Arial" 09.
Const FontSize = 12 10.
11.
'Main Beg 12.
13.
Call HtaBox("Mein Titel", "Mein Text", 2) 14.
15.
WScript.Quit 16.
17.
'Main End 18.
19.
Private Sub HtaBox(ByRef Titel, ByRef Text, ByVal Wait) 20.
Dim Fso, Path, Msg, Shell 21.
22.
Set Fso = CreateObject("Scripting.FileSystemObject") 23.
Path = Fso.GetParentFolderName(WScript.ScriptFullName) & "\Msg.Hta" 24.
Set Msg = Fso.CreateTextFile(Path) 25.
26.
With Msg 27.
.WriteLine "<html><head><title>" & Titel & "</title>" 28.
.WriteLine "<body bgcolor='buttonface' style='font-family:" & FontType & ";font-size:" & FontSize & "px'>" 29.
.WriteLine "<p>" & Text & "</p>" 30.
.WriteLine "</body>" 31.
.WriteLine "<HTA:APPLICATION" 32.
.WriteLine "ID='objMsg'" 33.
.WriteLine "APPLICATIONNAME='Msg-Ausgabe'" 34.
.WriteLine "SCROLL='no'" 35.
.WriteLine "SINGLEINSTANCE='yes'>" 36.
.WriteLine "<SCRIPT Language='VBScript'>" 37.
.WriteLine "BoxLeft = (Screen.Width - " & BoxWidth & ") / 2" 38.
.WriteLine "BoxTop = (Screen.Height - " & BoxHeight & ") / 2" 39.
.WriteLine "Window.ResizeTo " & BoxWidth & ", " & BoxHeight 40.
.WriteLine "Window.MoveTo BoxLeft, BoxTop" 41.
.WriteLine "Zeit = Now + TimeSerial(0, 0, " & Wait & ")" 42.
.WriteLine "Do While Zeit > Now: Loop" 43.
.WriteLine "Close" 44.
.WriteLine "</SCRIPT>" 45.
.WriteLine "</head></html>" 46.
.Close 47.
End With 48.
49.
With CreateObject("Wscript.Shell") 50.
.Run Path, 1, False 51.
.AppActivate Titel 52.
End With 53.
End SubGruß Dieter
[edit] Code geändert. Anstatt Time jetzt Now (Datum+Zeit) und Window "Mein Titel" mit Shell.AppActivate in den Vordergrund holen [/edit]
strzata schreibt am 18.09.2010 um 11:36:22 Uhr
Danke vielmals Dieter,
das HTA funktioniert bestens. Warum soll ich es erst von VBS schreiben lassen? Es geht doch auch, dass ich es per Hand erstelle und als hta-Datei abspeichere, oder? Dann könnte ich eine Verknüpfung dazu auf dem Desktop anlegen und dem Anwender vorgaukeln, dass er damit mein Programm startet. Und da habe ich noch zwei Probleme:
1. beim Starten des HTA blitzt kurz ein großes Fenster auf, bevor das ResizeTo und MoveTo ausgeführt wird. Das stört etwas. Man müsste das Fenster solange verstecken (bzw. erst anzeigen), bis es am richtigen Ort sitzt.
2. In dem HTA muss ich jetzt mein Hauptprogramm aufrufen (nennen wir es jetzt mal notepad.exe). Kannst Du mir sagen, wie das geht?
Das 'Do While Zeit" ist genial. Ich habe das Schliessen-Problem schon in verschiedenen Foren beschrieben. Alle haben gesagt: das geht nicht. Und siehe: es geht doch!
Gruß Norbert
das HTA funktioniert bestens. Warum soll ich es erst von VBS schreiben lassen? Es geht doch auch, dass ich es per Hand erstelle und als hta-Datei abspeichere, oder? Dann könnte ich eine Verknüpfung dazu auf dem Desktop anlegen und dem Anwender vorgaukeln, dass er damit mein Programm startet. Und da habe ich noch zwei Probleme:
1. beim Starten des HTA blitzt kurz ein großes Fenster auf, bevor das ResizeTo und MoveTo ausgeführt wird. Das stört etwas. Man müsste das Fenster solange verstecken (bzw. erst anzeigen), bis es am richtigen Ort sitzt.
2. In dem HTA muss ich jetzt mein Hauptprogramm aufrufen (nennen wir es jetzt mal notepad.exe). Kannst Du mir sagen, wie das geht?
Das 'Do While Zeit" ist genial. Ich habe das Schliessen-Problem schon in verschiedenen Foren beschrieben. Alle haben gesagt: das geht nicht. Und siehe: es geht doch!
Gruß Norbert
didi1954 schreibt am 18.09.2010 um 14:41:37 Uhr
Hallo nochmal!
Mir ist gerade eingefallen, dass Du doch ein VB- und HTA-Skript brauchst, sonst funktioniert das Ganze ja nicht, weil Du ja dann in der Loop-Schleife hängen bleibst und keine nachfolgenden Anweisungen ausgeführt werden (starten, aktivieren....).
Das Hauptprogramm kannst Du im Main-Teil vor dem "Call HtaBox" per Shell.Run starten z.B.
Gruß Dieter
Mir ist gerade eingefallen, dass Du doch ein VB- und HTA-Skript brauchst, sonst funktioniert das Ganze ja nicht, weil Du ja dann in der Loop-Schleife hängen bleibst und keine nachfolgenden Anweisungen ausgeführt werden (starten, aktivieren....).
Das Hauptprogramm kannst Du im Main-Teil vor dem "Call HtaBox" per Shell.Run starten z.B.
| Shell.Run "Notepad",1, False |
Gruß Dieter
strzata schreibt am 18.09.2010 um 14:56:24 Uhr
Du machst Dir ja eine Mühe mit mir - vielen vielen Dank.
>>Das Hauptprogramm kannst Du im Main-Teil vor dem "Call HtaBox" per Shell.Run starten
Da war ich gerade dabei und das wird wohl auch nicht schwer. Da wurde ich wieder durch das "Aufblitzen" gestört. Das sieht wie ein DOS-Fenster aus. Könnte es sein, dass als Default CScript.exe und nicht WScript.exe eingestellt ist? Wie bekomme ich das heraus? Auf meinem Rechner könnte ich das leicht umstellen (cscript //H:wscript). Aber was mache ich mit meinen Anwendern? Wie stelle ich die um? Das Fenster könnte aber auch ein Browserfenster sein. Man kann es nicht untersuchen. Es ist im Bruchteilt einer Sekunde wieder zu.
N.
>>Das Hauptprogramm kannst Du im Main-Teil vor dem "Call HtaBox" per Shell.Run starten
Da war ich gerade dabei und das wird wohl auch nicht schwer. Da wurde ich wieder durch das "Aufblitzen" gestört. Das sieht wie ein DOS-Fenster aus. Könnte es sein, dass als Default CScript.exe und nicht WScript.exe eingestellt ist? Wie bekomme ich das heraus? Auf meinem Rechner könnte ich das leicht umstellen (cscript //H:wscript). Aber was mache ich mit meinen Anwendern? Wie stelle ich die um? Das Fenster könnte aber auch ein Browserfenster sein. Man kann es nicht untersuchen. Es ist im Bruchteilt einer Sekunde wieder zu.
N.
strzata schreibt am 18.09.2010 um 15:26:24 Uhr
Hab ne test.bat mit Deinen zwei Zeilen geschrieben. Wenn ich die doppelklicke, sehe ich erst kurz das DOS-Fenster, dann blitzt kurz das schon bekannte andere große Fenster auf und dann sehe ich das HTA. Das beste wäre schon, das HTA erst anzuzeigen, wenn es geschrumpft und an seinem Ort ist, also erst nach dem ResizeTo und MoveTo. Aber ich weiss nicht, wie man das machen könnte.
N.
N.
Edi.Pfisterer schreibt am 19.09.2010 um 20:52:52 Uhr
@ didi1954 :
man lernt nie aus!!!
den Befehl with kannte ich noch nicht, auch sonst eine sehr elegante Lösung
Danke für Deinen Beitrag!
man lernt nie aus!!!
den Befehl with kannte ich noch nicht, auch sonst eine sehr elegante Lösung
Danke für Deinen Beitrag!
didi1954 schreibt am 19.09.2010 um 23:31:09 Uhr
Hallo Edi!

Hier noch die Definition dazu:
Mit der With-Anweisung können Sie ein Objekt oder einen benutzerdefinierten Typ einmal für eine ganze Folge von Anweisungen festlegen. With-Anweisungen beschleunigen die Ausführung von Prozeduren und reduzieren wiederholte Eingaben.
Gruß Dieter
Zitat von Edi.Pfisterer:
@ didi1954 :
man lernt nie aus!!!
den Befehl with kannte ich noch nicht, auch sonst eine sehr elegante Lösung
Du bist ja auch schon längere Zeit Mitglied und kanntest die Anweisung With noch nicht. Kann ich kaum glauben@ didi1954 :
man lernt nie aus!!!
den Befehl with kannte ich noch nicht, auch sonst eine sehr elegante Lösung
Hier noch die Definition dazu:
Mit der With-Anweisung können Sie ein Objekt oder einen benutzerdefinierten Typ einmal für eine ganze Folge von Anweisungen festlegen. With-Anweisungen beschleunigen die Ausführung von Prozeduren und reduzieren wiederholte Eingaben.
Gruß Dieter
didi1954 schreibt am 17.01.2011 um 09:20:21 Uhr
Hallo zusammen!
Das letzte Skript bringt - zumindest bei mir - in Abhängigkeit von Zeitangaben > 2 Skekunden Browser-TimeOuts. Von daher, hier eine andere Methode mit Hilfe eines Timers, der nach Ablauf der Zeit die Schließ-Routine aufruft und dadurch keine Probleme bei größeren Zeitangaben auftreten:
Gruß Dieter
Das letzte Skript bringt - zumindest bei mir - in Abhängigkeit von Zeitangaben > 2 Skekunden Browser-TimeOuts. Von daher, hier eine andere Methode mit Hilfe eines Timers, der nach Ablauf der Zeit die Schließ-Routine aufruft und dadurch keine Probleme bei größeren Zeitangaben auftreten:
01.
Option Explicit 02.
03.
Const BoxWidth = 300 04.
Const BoxHeight = 120 05.
06.
Const FontType = "Arial" 07.
Const FontSize = 12 08.
09.
'Main Beg 10.
11.
Call HtaBox("Mein Titel", "Mein Text", 5) 'Wait-Angabe in Sekunden 12.
13.
WScript.Quit 14.
15.
'Main End 16.
17.
Private Sub HtaBox(ByRef Titel, ByRef Text, ByVal Wait) 18.
Dim Fso, Path, Msg, Shell 19.
20.
Set Fso = CreateObject("Scripting.FileSystemObject") 21.
Path = Fso.GetParentFolderName(WScript.ScriptFullName) & "\Msg.Hta" 22.
Set Msg = Fso.CreateTextFile(Path) 23.
24.
With Msg 25.
.WriteLine "<html><head><title>" & Titel & "</title>" 26.
.WriteLine "<HTA:APPLICATION" 27.
.WriteLine "ID='objMsg'" 28.
.WriteLine "APPLICATIONNAME='Msg-Ausgabe'" 29.
.WriteLine "SCROLL='no'" 30.
.WriteLine "SINGLEINSTANCE='yes'/>" 31.
.WriteLine "</head>" 32.
.WriteLine "<SCRIPT Language='VBScript'>" 33.
.WriteLine "Sub Window_OnLoad" 34.
.WriteLine "Window.ResizeTo " & BoxWidth & ", " & BoxHeight 35.
.WriteLine "Window.MoveTo ((Screen.Width - " & BoxWidth & ") / 2), ((Screen.Height - " & BoxHeight & ") / 2 )" 36.
.WriteLine "Text.InnerHTML = ""<p>" & Text & "</p>""" 37.
.WriteLine "window.setInterval ""MsgClose"", " & Wait & " * 1000" 38.
.WriteLine "End Sub" 39.
.WriteLine "Sub MsgClose" 40.
.WriteLine "Close" 41.
.WriteLine "End Sub" 42.
.WriteLine "</SCRIPT>" 43.
.WriteLine "<body bgcolor='buttonface' style='font-family:" & FontType & ";font-size:" & FontSize & "px'>" 44.
.WriteLine "<span id='Text'></span>" 45.
.WriteLine "</body></html>" 46.
.Close 47.
End With 48.
49.
With CreateObject("Wscript.Shell") 50.
.Run Path, 1, False 51.
.AppActivate Titel 52.
End With 53.
End SubGruß Dieter







