blacksun
Goto Top

Hinweisfenster einblenden, welches vor einem durch die Batch gestartetem Tool erscheint

Hallo zusammen,

ich habe eine Batch, die zum Testen erst einmal mspaint wie folgt startet.

[code]
@echo off

REM hier den AnWendungspfad eintragen
cd "c:\wtsrv\system32"

mspaint.exe
...
[/code]


Diese Batch läuft "unsichtbar". Paint wird nicht per start gestartet, da noch etwas passieren soll, sobald Paint geschlossen wird. Dies passiert bei den Pünktchen.

Beim Anwender soll beim Aufruf also paint starten. Gleichzeitig soll im Vordergrund ein Hinweisfenster eingeblendet werden, das den Anwender über eine Wartezeit von einem definierten Zeitraum (z.B. 10 Sekunden) informiert und dann verschindet, so dass er dann das gestartete Paint sieht.

Idee:
Ich mache eine Hinweis.bat, welche den Anwender über die Wartezeit informiert und das dann nach dem von mir gewünschten Zeitraum wieder verschwindet.
Den Aufruf der Hinweis.bat schreibe ich vor das mspaint.exe


Problem:
Rufe ich das mit
[code]
start "" hinweis.bat
[/code]
auf, dann startet nach meiner Hinweis.bat sofort danach Paint. Allerdings befindet sich das Fenster mit dem Hinweis im Hintergrund hinter Paint.

Rufe ich die Hinweis.bat ohne das start "" auf, dann wird Paint erst gestartet, wenn die Hinweis.bat abgearbeitet wurde.


Frage:
Wie kann ich paint starten und vor paint einen Hinweis setzen der den Anwender informiert, zum Warten zwingt und der im Vordergrund bleibt?

Wie gesagt muss der Aufruf vor dem paint-Start erfolgen, da die Batch, die Paint startet, weiterhin noch aktiv bleibt und noch etwas ausführen soll, sobald Paint geschlossen wird.

Viele Grüße
Martin

Content-Key: 189921

Url: https://administrator.de/contentid/189921

Printed on: April 18, 2024 at 07:04 o'clock

Member: ChrisDynamite
ChrisDynamite Aug 21, 2012 at 10:46:48 (UTC)
Goto Top
Das dürfte über eine MSGBox gehen. Dein Google Begriff ist MSGBOX + Batch
Member: blacksun
blacksun Aug 21, 2012 updated at 11:20:25 (UTC)
Goto Top
Zitat von @ChrisDynamite:
Das dürfte über eine MSGBox gehen. Dein Google Begriff ist MSGBOX + Batch


jab aber wie bekomme ich die in den Vordergrund?
Die starte ich ja auch vor dem paint.

Und damit überdeckt Paint auch wieder diese MSGBOX
Mitglied: 76109
76109 Aug 21, 2012 at 11:53:13 (UTC)
Goto Top
Hallo blacksun!

Versuchs mal mit diesem Script (*.vbs):
MsgBox "Bitte warten!", vbInformation,"Paint wird gestartet..."  
CreateObject("Wscript.Shell").Run "mspaint.exe", 10, False  

Gruß Dieter
Member: blacksun
blacksun Aug 21, 2012 at 12:20:21 (UTC)
Goto Top
Zitat von @76109:

Versuchs mal mit diesem Script (*.vbs):
> MsgBox "Bitte warten!", vbInformation,"Paint wird gestartet..."  
> CreateObject("Wscript.Shell").Run "mspaint.exe", 10, False  
> 


Hallo Dieter,

bringt leider auch nichts.
Paint startet erst wenn die Meldung bestätigt wird.

- Es soll aber erreicht werden, dass Paint startet und gleichzeitig die Meldung im Vordergrund erscheint (nicht hinter Paint versteckt ist)
- die Meldung soll Paint "verdecken" mit dem Hinweis noch zu warten
- Nachdem paint vom Anwender geschlossen wird sollen noch weitere Befehle abgearbeitet werden.

Viele Grüße
Martin
Member: bastla
bastla Aug 21, 2012 updated at 12:49:50 (UTC)
Goto Top
... und so
Set Sh = CreateObject("WScript.Shell")  
Sh.PopUp "Paint wird gestartet ...", 10  
Sh.Run "mspaint.exe", 8, True  
oder so (eher nicht face-sad)?
Set Sh = CreateObject("WScript.Shell")  
Sh.Run "mspaint.exe", 1, False  
Sh.PopUp "Paint wird gestartet...", 10  
Grüße
bastla

[Edit] Parameter "bWaitOnReturn" in Variante 1 auf True geändert [/Edit]
Mitglied: 76109
76109 Aug 21, 2012 at 12:41:54 (UTC)
Goto Top
Hallo bastla!

Mhm, dass Script soll doch nachdem Paint geschlossen ist weiterlaufen. Also eher Variante 1 mit True am Ende oder nicht?

Gruß Dieter
Member: bastla
bastla Aug 21, 2012 at 12:45:13 (UTC)
Goto Top
Hallo Dieter!

Yep - wäre besser face-smile (ändere ich oben) ...

Grüße
bastla
Member: blacksun
blacksun Aug 21, 2012 updated at 13:31:34 (UTC)
Goto Top
hmm, ich bräuchte eine Kombination aus beidem

Das was der Anwender sieht soll so aussehen:
[IMG]http://i48.tinypic.com/e0lb0w.jpg[/IMG]

D.h. die Meldung soll zwingend IMMER vor Paint erscheinen.


Aber das Skript soll auf jeden Fall noch was tun, wenn paint vom Anwender geschlossen wird!

Insgesamt soll schematisch folgendes passieren:

[code]
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "connect.bat", 0, False

'Dann soll Paint starten mit der Meldung im VORDERGRUND
Set Sh = CreateObject("WScript.Shell")
Sh.PopUp "Paint wird gestartet ...", 10
Sh.Run "mspaint.exe", 8, True

'Wenn Paint geschlossen wird soll passieren
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.Run "disconnect.bat", 0, False
[/code]


die connect.bat und disconnect.bat müssen aber in einem anderen Ordner ausgeführt werden wie mspaint (weil darin ein zweiteiliges Tool gestartet wird welches den zweiten Teil zwingend im gleichen Ordner erwartet

Ingesamt soll also folgendes passieren:
1. Eine Connect-Batch wird ausgeführt
2. Paint startet
3. Meldung erscheint
4. Erst wenn der Anwender paint schließt soll die Disconnect-Batch ausgeführt werden.
Member: pieh-ejdsch
pieh-ejdsch Aug 21, 2012 updated at 13:33:39 (UTC)
Goto Top
moin blacksun,

sowas ähnliches gabs schonmal.
Im cmd gehts auch:
@echo off
setlocal
set /a Timer=15
set "WSig=PaintFertig%Random%"  
start "Warte auf Ende von Paint" /min cmd /c "mspaint && waitfor /si %wsig% "  
timeout /t 2 >nul
start "Moment Bitte ..." cmd /c " mode 50,10 &(for /l %%i in (%timer% -1 1) do title Bitte noch %%i sekunde^(n^) Warten. &cls &echo Paint startet ... moment&<nul set /p "=Warten sie Bitte noch %%i sekunde(n)" &timeout /t 1 /nobreak >nul) "  
waitfor %wsig%
title jetzt kanns hier weitergehen weil Paint beendet wurde.
for /l %%i in (5 -1 1) do cls &<nul set /p "=Programm endet in %%i sekunde(n)" &timeout /t 1 /nobreak >nul  
exit /b
Waitfor wird mindestens dafür gebraucht.
Timeout könnte duch ping ersetzt werden.

Gruß Phil
Mitglied: 76109
76109 Aug 21, 2012 updated at 16:13:29 (UTC)
Goto Top
Hallo blacksun!

Na, in VBS dann mit 2 Skripts:
Skript1:
Set Sh = CreateObject("WScript.Shell")  
Sh.Run Replace(WScript.ScriptFullName, WScript.ScriptName, "PopUp.vbs"), 0, False  
Sh.Run "mspaint.exe", 3, True  
Skript2 (PopUp.vbs):
WScript.Sleep 500   'anpassen  
CreateObject("WScript.Shell").PopUp "Paint wurde gestartet bitte 15 Sekunden warten...", 15  

Gruß Dieter

[edit] bastlas Vorschlag übernommen [/edit]
Member: blacksun
blacksun Aug 21, 2012 updated at 14:34:25 (UTC)
Goto Top
@phil und Dieter

Mensch, genau das hab ich gesucht, beide Varianten funktionieren perfekt.

Was mir schon seit einigen Wochen durch den Kopf geht:

Im Moment kommen bei mir Windows2003-Server (32-Bit) zum Einsatz. Ende nächsten Jahres sollen diese durch Windows Windows Server 2012 ersetzt werden.

Wie sieht das dann mit Batch und VBS aus?
Funktionieren dann Batch und VBS noch? Wie sieht das aus?
Muss ich dann meine ganzen Batch-Skripte umschreiben? Und wenn ja, in was?
Member: bastla
bastla Aug 21, 2012 updated at 15:57:31 (UTC)
Goto Top
Hallo Dieter!

Vorschlag, um das noch etwas dynamischer zu machen:
Sh.Run Replace(WScript.ScriptFullName, WScript.ScriptName, "") & "PopUp.vbs", 0, False
- dann genügt es, beide Scripts in den gleichen Ordner zu legen ...

Grüße
bastla
Mitglied: 76109
76109 Aug 21, 2012, updated at Aug 22, 2012 at 07:54:49 (UTC)
Goto Top
Hallo blacksun!

Hier noch eine 'PopUp.hta', die in der Anzeige die Sekunden herunterzählt und auch solange den Fokus behält:
<html>
<head>
<title>Paint gestartet...</title>
<HTA:APPLICATION
     ID = "AutoRefresh"  
     ApplicationName = "Paint"  
     Scroll = "no"  
     SysMenu = "no"  
     SingleInstance="yes"/>  
</head>

<SCRIPT LANGUAGE="VBScript">  
    Const WaitSecond = 15       'Wartezeit in Sekunden  
    Const WindowWidth = 260     'Fensterbreite  
    Const WindowHeight = 100    'Fensterhöhe  

    Dim Zeit, oShell
   
    Sub Window_OnLoad()
        Window.ResizeTo WindowWidth, WindowHeight
        Window.MoveTo ((Screen.Width - WindowWidth) / 2), ((Screen.Height - WindowHeight) / 2)

        Set oShell = CreateObject("WScript.Shell")  
        Zeit = DateAdd("s", WaitSecond, Now)  
        Call RefreshTime: TimerID = Window.SetInterval("RefreshTime", 100)  
    End Sub

    Sub RefreshTime()
        If Zeit <= Now Then Close
        oShell.AppActivate "Paint gestartet..."  
        Document.All.Sek.Value = Right(Space(4) & Second(Zeit - Now), 5)
    End Sub
</SCRIPT>
<body bgcolor='buttonface' style='font-family:Arial;font-size:12px'>  
&nbsp;&nbsp;Bitte noch warten&nbsp;&nbsp;
<input type='text' name='Sek' value='' readonly='readonly' size='1' style='font-family:Arial;font-size:12px'>  
&nbsp;&nbsp;Sekunden
</body>
</html>

@bastla
Deinen Vorschlag habe ich oben eingebaut

Gruß Dieter
Member: bastla
bastla Aug 21, 2012 updated at 21:05:31 (UTC)
Goto Top
@Dieter
Deinen Vorschlag habe ich oben eingebaut
... und das très elegant face-smile

Grüße
bastla
Member: evinben
evinben Jun 27, 2013 at 21:35:00 (UTC)
Goto Top
Hallo,

könnte die Zeit bei
CreateObject("WScript.Shell").PopUp "TextZumAnzeigen", 1  
weniger als Sekunde gesetzt werden? Z. B. nur eine halbe Sekunde?

Gruß
Evinben
Member: bastla
bastla Jun 27, 2013 at 21:52:16 (UTC)
Goto Top
Hallo evinben!

Geht nur mit minimal 1 Sekunde.

Grüße
bastla
Member: evinben
evinben Jun 28, 2013 updated at 05:15:31 (UTC)
Goto Top
Hallo bastla,

schade. Dann schaue ich einen neuen Beitrag Vormittag zu eröffnen. Sicherlich gäbe es da andere alternative und ebenso "KURZE" Lösungen (im Falle in VBA für Outlook).

Einen schönen Freitag!
evinben