beidermachtvongreyscull
Goto Top

Full-Screen PopUp HTA-Framework mit IFrame

Hallo zusammen,

weil es angefragt wurde, veröffentliche ich hier mal meine Version eines "Nachricht des Tages"-PopUps.
Der Code funktioniert unter Windows 10 noch immer. face-smile

Untenstehendes Script funktioniert wie folgt:

durch einen simplen Aufruf

start /wait inst-startup.hta

startet das HTA, legt sich über den ganzen Bildschirm und lädt eine HTM-Datei (hier "inst-startup-mess.htm"), welche im selben Ordner, wie das Script liegt, in den IFrame).
Die entsprechende HTML-Seite hatte ich damals über Powerpoint erstellt und als HTML exportiert. Das funktionierte, wie geleckt.

Ich habe nicht getestet, ob sich auch andere Dateiformate im IFrame anzeigen lassen, aber da könnt Ihr ja mal schauen, was geht.

<html>
    	<HTA:APPLICATION ID = 'MyAppID'  
		APPLICATIONNAME = 'IT-Infobox'  
		Caption = 'yes'  
		Icon = '27knight.ico'  
		VERSION = '1.0'  
		INNERBORDER = 'yes'  
		MAXIMIZEBUTTON = 'yes'  
		MINIMIZEBUTTON = 'yes'  
		CONTEXTMENU = 'yes'  
		NAVIGABLE = 'no'  
		SCROLLFLAT = 'yes'  
		Scroll = 'no'  
		SELECTION = 'yes'  
		ShowInTaskbar = 'yes'  
		SINGLEINSTANCE = 'yes'  
		SYSMENU = 'no'  
		BORDER = 'yes'  
		BorderStyle = 'normal'  
		WindowState = 'normal'  
	>
    	<header>
		<title>Nachricht des Tages</title>		
    		<script language = "VBScript">  
			Const Dauer = "0:0:30"							  
			Dim EndeZeit								
			Dim WarteCountdown							
			WarteCountdown = 30							
			Sub OnLoadHTA()
    				Dim mLeft
    				Dim mTop
				Dim mWindowSizeX
				Dim mWindowSizeY
				mWindowSizeX = Window.Screen.Width				
				mWIndowSizeY = Window.Screen.Height				
    				mLeft = window.Screen.Width / 2
    				mTop = window.Screen.Height / 2
    				mLeft = mLeft - (mWindowSizeX / 2)
    				mTop = mTop - (mWindowSizeY / 2)
    				Call window.moveTo(mLeft,mTop)					
    				Call window.resizeTo(mWindowSizeX,mWindowSizeY)			
				Window.focus							
				EndeZeit = CDate(Now() + CDate(Dauer))				
				
			End Sub

			Function ZeitAnzeige() 
				RestZeit = CDate(EndeZeit - Now())              
				If Len(Second(RestZeit)) = 1 Then								
					Text = Text & "0"						  
				End If

				Text = Text & Second(RestZeit) 									

                               	If CDate(EndeZeit) > CDate(Now()) Then								
					Text = "(Dieses Fenster schließt sich in " & Text & " Sekunden automatisch.)"  
				End If

				If not CDate(EndeZeit) > CDate(Now()) Then 							
					window.clearInterval(YesIntervall)							
					self.close										
				End If

				document.all.RestZeitAnzeige.innerHTML = Text							
			End Function 							





	    		Sub Window_OnLoad
        			idTimer = window.setTimeout("PausedSection", WarteCountdown*1000, "VBScript")	  
			End Sub

        		Sub PausedSection
        		End Sub
    		</script>
	</header>
    	<body onload = OnLoadHTA>
		<title></title>
		<IFRAME SRC="inst-startup-mess.htm" WIDTH=100% HEIGHT=90% FRAMEBORDER=0 APPLICATION="no"></IFRAME>  
		<p align="center"><BUTTON onclick= 'window.close()'>Fenster schließen</BUTTON><br>  
		<!-- <Center id=RestZeitAnzeige style="font-family:TKTypeRegular,Verdana;"> </Center> -->  
		</p>
	</body>
</html>

Hier eine Version mit aktivem Countdown und Auto-Close:
<html>
    	<HTA:APPLICATION ID = 'MyAppID'  
		APPLICATIONNAME = 'IT-Infobox'  
		Caption = 'yes'  
		Icon = '27knight.ico'  
		VERSION = '1.0'  
		INNERBORDER = 'yes'  
		MAXIMIZEBUTTON = 'yes'  
		MINIMIZEBUTTON = 'yes'  
		CONTEXTMENU = 'yes'  
		NAVIGABLE = 'no'  
		SCROLLFLAT = 'yes'  
		Scroll = 'no'  
		SELECTION = 'yes'  
		ShowInTaskbar = 'yes'  
		SINGLEINSTANCE = 'yes'  
		SYSMENU = 'no'  
		BORDER = 'yes'  
		BorderStyle = 'normal'  
		WindowState = 'normal'  
	>
    	<header>
		<title>Nachricht des Tages</title>		'Fenstertitel  
    		<script language = "VBScript">  
			Const Dauer = "0:0:30"							'Countdown H:M:S in Verwendung von Funktion ZeitAnzeige()  
			Dim EndeZeit								'Deklaration Variable EndeZeit  
			Dim WarteCountdown							'Deklaration Variable WarteCountdown  
			WarteCountdown = 30							'Admin-Einstellung: Sekunden bis Zähler auf 0 und Fenster sich schließen soll  
			Sub OnLoadHTA()
    				Dim mLeft
    				Dim mTop
				Dim mWindowSizeX
				Dim mWindowSizeY
				mWindowSizeX = Window.Screen.Width				'Fensterbreite  
				mWIndowSizeY = Window.Screen.Height				'Fensterhöhe  
    				mLeft = window.Screen.Width / 2
    				mTop = window.Screen.Height / 2
    				mLeft = mLeft - (mWindowSizeX / 2)
    				mTop = mTop - (mWindowSizeY / 2)
    				Call window.moveTo(mLeft,mTop)					'Fenster in Bildschirmmitte ausrichten (Linke Ecke)  
    				Call window.resizeTo(mWindowSizeX,mWindowSizeY)			'Fenstergröße anpassen (mWindowSizeX mWindowSizeY)  
				Window.focus							'Fenster in Vordergrund  
				EndeZeit = CDate(Now() + CDate(Dauer))				'EndeZeit = Jetzt + Dauer  
				Call ZeitAnzeige						'ZeitAnzeige-Funktion aufrufen  
				YesIntervall = window.setInterval("ZeitAnzeige",1000)		'Wiederholungsintervall für Zeitanzeigeaufruf (hier 1 Sekunde (1000 Millisekunden))  
			End Sub

			Function ZeitAnzeige() 
				RestZeit = CDate(EndeZeit - Now())              
				'If Len(Hour(RestZeit)) = 1 Then 								'Wenn "Anzahl der Stundenziffern von RestZeit=1" wahr ist   
				'	Text = Text & "0"									'dann ergänze Variable "Text" um eine Null  
				'End If  

				'Text = Text & Hour(RestZeit) & ":"								'Ergänze Variable "Text" mit Ihrem vorhandenen Inhalt + Stunden von RestZeit + ":"  

				'If Len(Minute(RestZeit)) = 1 Then								'Wenn "Anzahl der Minutenziffern von RestZeit=1" wahr ist  
				'	Text = Text & "0"									'dann ergänze Variable "Text" mit vorhandenem Inhalt + um eine Null  
				'End If  

				'Text = Text & Minute( RestZeit ) & ":"								'Ergänze Variable "Text" mit Ihrem vorhandenen Inhalt + Minuten von Restzeit + ":"  

				If Len(Second(RestZeit)) = 1 Then								'Wenn "Anzahl der Sekundenziffern von RestZeit=1" wahr ist  
					Text = Text & "0"									'dann ergänze Variable "Text" mit Ihrem vorhandenem Inhalt + um eine Null  
				End If

				Text = Text & Second(RestZeit) 									'Ergänze Variable "Text" mit ihrem vorhandenen Inhalt + Sekunden von Restzeit + ":"  

                               	If CDate(EndeZeit) > CDate(Now()) Then								'Wenn "EndeZeit > als Jetzt" wahr ist			  
					Text = "(Dieses Fenster schließt sich in " & Text & " Sekunden automatisch.)"		'dann ergänze Variable "Text" mit ihrem vorhandenen Inhalt in dieser Form: "==> In %Inhalt von Text% startet dieser PC automatisch neu <=="  
				End If

				If not CDate(EndeZeit) > CDate(Now()) Then 							'Wenn "EndeZeit > als Jetzt" falsch ist  
					window.clearInterval(YesIntervall)							'dann lösche Intervall "YesIntervall"  
					self.close										'und schließe dieses HTA-Fenster  
				End If

				document.all.RestZeitAnzeige.innerHTML = Text							'Übergebe Inhalt von "Text" an RestZeitAnzeige im HTML-Body.  
			End Function ' ZeitAnzeige() 										'Funktion verlassen  





	    		Sub Window_OnLoad
        			idTimer = window.setTimeout("PausedSection", WarteCountdown*1000, "VBScript")	'Countdown zum Aufrufen der Prozedur "PausedSection"  
			End Sub

        		Sub PausedSection
                    'window.close						'Fenster schließen  
        		End Sub
    		</script>
	</header>
    	<body onload = OnLoadHTA>
		<title>SAP-GUI wird installiert</title>
		<IFRAME SRC="inst-startup-mess.htm" WIDTH=100% HEIGHT=90% FRAMEBORDER=0 APPLICATION="no"></IFRAME>  
		<p align="center"><BUTTON onclick= 'window.close()'>Fenster schließen</BUTTON><br>  
		<Center id=RestZeitAnzeige style="font-family:TKTypeRegular,Verdana;"> </Center>  
		</p>
	</body>
</html>


Viel Spaß und Grüße.

bdmvg

Content-ID: 589675

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

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

zeroblue2005
zeroblue2005 22.07.2020 aktualisiert um 11:04:05 Uhr
Goto Top
Hi,

danke dafür, aber verstehe ich das richtig? Jetzt Beispiel von mir, was ich gerade ausprobiert habe:

Batch Test:
start /wait "C:\Users\user\Desktop\test.hta"  

Öffnet die test.hta

test.hta:
Zeile:
		
<IFRAME SRC="C:\Users\user\Desktop\test.htm" WIDTH=100% HEIGHT=90% FRAMEBORDER=0 APPLICATION="no"></IFRAME>  

Öffnet die test.htm oder html auf "C:\Users\user\Desktop\test.htm" mit Inhalt:

<html>
Hallo
</html>

Weil wenn so ist, geht das bei mir nicht?
beidermachtvongreyscull
beidermachtvongreyscull 22.07.2020 um 11:33:15 Uhr
Goto Top
Lege die test.htm in den selben Ordner wie das Script.
zeroblue2005
zeroblue2005 22.07.2020 aktualisiert um 12:59:40 Uhr
Goto Top
Hi,

ja klappt Pfad darf nicht der absolute sein!

Sehe gerade, das mit Self Close hast auch drin, dann brauche ich das nicht einbauen, aber er reagiert darauf irgendwie nicht Fenster bleibt immer offen? Hast du einen Rat?
beidermachtvongreyscull
beidermachtvongreyscull 22.07.2020 um 13:42:05 Uhr
Goto Top
Ich habe in der Anleitung eine zweite Version eingetragen.
Diese enthält den Timer und die aktive AutoClose-Funktion.
zeroblue2005
zeroblue2005 22.07.2020 um 13:55:51 Uhr
Goto Top
Recht herzlichen Dank! Jetzt ist ein Schuh daraus geworden, danke! face-smile
beidermachtvongreyscull
beidermachtvongreyscull 22.07.2020 um 16:00:03 Uhr
Goto Top
Gerne doch.
Markierst Du bitte Deinen Thread noch als gelöst?
zeroblue2005
zeroblue2005 25.07.2020 um 09:37:12 Uhr
Goto Top
Hallo,

ich habe jetzt schon für das Projekt, was ich gerade bearbeite einiges mit deinem Code anfangen können. Das Gute an deinen Code ist, dass ich fast jegliche Art von Inhalte darstellen kann.

Nun bin ich aber an einem Problem angekommen, wo ich an die Grenzen komme. Ich würde gerne ein Popup erzeugen, mit einer bestimmten Grösse. Bis hierhin ist es ja einfach. Nun soll dieses Popup aber an einer bestimmten Stelle geöffnet werden. Sprich X und Y Position Pixel, ausgegangen von der oberen linken Ecke des Popup.

Meist du das kann dein Code leisten?
beidermachtvongreyscull
beidermachtvongreyscull 25.07.2020 um 10:06:42 Uhr
Goto Top
Moin,

Versuche es mal so:

<head>
  <title>TopLeft HTA</title>
  <HTA:APPLICATION
    APPLICATIONNAME="TopLeft HTA"  
  >
  <SCRIPT Language="VBScript">  
    window.moveTo 0, 0
  </SCRIPT>
 </head>
 <body></body>
</html>

Die Zeile mit "Windows.moveTo" dürfte zur Ausrichtung an bestimmten Koordinaten helfen.
zeroblue2005
zeroblue2005 25.07.2020 um 12:24:36 Uhr
Goto Top
Ja, hat super geklappt, sieht jetzt bei mir so aus:

  	
<header>
		<title>IHRE UNTERSCHRIFT</title>		'Fenstertitel  
    		<script language = "VBScript">  
			Const Dauer = "0:0:10"						'Countdown H:M:S in Verwendung von Funktion ZeitAnzeige()  
			Dim EndeZeit								'Deklaration Variable EndeZeit  
			Dim WarteCountdown							'Deklaration Variable WarteCountdown  
			WarteCountdown = 5							'Admin-Einstellung: Sekunden bis Zähler auf 0 und Fenster sich schliessen soll  
			Sub OnLoadHTA()
    				Dim mLeft
    				Dim mTop
				Dim mWindowSizeX
				Dim mWindowSizeY
				mWindowSizeX = 1400		'Fensterbreite  
				mWIndowSizeY = 800		'Fensterhöhe  
				window.moveTo 489, 650										'Position festlegen  
    			Call window.resizeTo(mWindowSizeX,mWindowSizeY)				'Fenstergröße anpassen (mWindowSizeX mWindowSizeY)  
				Window.focus												'Fenster in Vordergrund  
				EndeZeit = CDate(Now() + CDate(Dauer))						'EndeZeit = Jetzt + Dauer  
				Call ZeitAnzeige											'ZeitAnzeige-Funktion aufrufen  
				YesIntervall = window.setInterval("ZeitAnzeige",1000)		'Wiederholungsintervall für Zeitanzeigeaufruf (hier 1 Sekunde (1000 Millisekunden))  
			End Sub

Eine Frage hätte ich da noch, im Iframe wird dieser kleine HTML Code geladen:

<html>
<p align="center"><img src="beispiel.png" width="1054" height="521" border="1" alt=""></p>  
</html>

Hast du eine Idee, wie die Syntax sein muss, wenn ich bei Klick auf das Bild möchte, dass sich das Popup schliesst, sprich:

<a href="JavaScript:window.close()">Close</a>  
oder geht das überhaupt aus dem Iframe heraus?
beidermachtvongreyscull
beidermachtvongreyscull 25.07.2020 um 12:41:02 Uhr
Goto Top