Wie kann man eine HTA-Datei in Batch ausführen?
Vor ein paar Monaten habe ich auf einer Website gesehen, dass man eine HTA-Datei ohne die Schließleiste für das Fenster anzeigen kann. Als ich im Task-Manager nachgeschaut habe, wurde sie als "Microsoft HTML-Anwendung" oder so ähnlich angezeigt. Aber es gab keine Schließleiste für das Fenster wie bei einer normalen HTA-Datei. Durch diese Methode konnte man beispielsweise Bilder auf dem Bildschirm anzeigen. Kann mir bitte jemand helfen? Ich kann die Website nicht mehr finden.
1 Antwort
HTA Hypertext Applicationen sollte man mit größter Vorsicht genießen.
Die Technologie ist sehr alt und bedient sich eins speziellen Modus des InternetExplorers. mshta.exe ist lediglich ein Wrapper, welcher das IE-Object in diesem "Ausnahmemodus" versetzt.
Im Gegensatz zu HTML-Seiten und deren Code haben HTA vollen Systemzugriff !!!! (auch wenn diese eigentlich den gleichen Code beinhalten)
- Verwende nie unbekannte HTA oder Dateien deren Code Du nicht verstehst.
- Auf neueren Systemen werden in naher Zukunft HTA nicht mehr funktionieren
HTA ist Defaultzustand kompatibel zu InternetExplorer 6.2 !!! ...und kann nicht mehr als dieser!
Mit der Zeile:
<meta http-equiv="x-ua-compatible" content="ie=IE9">
...kann man den höchsten KompatibolitätsModus setzen, bei dem <hta:application>-Tag ausgewertet wird.
Wie bekommt man nun die Titelleste weg?ganz einfach im Application-Tag caption="no"setzen. Aber sorge dafür, das es eine andere Möglichkeit zum schließen des Fensters gibt.
demo.hta
<!DOCTYPE html>
<meta http-equiv="x-ua-compatible" content="ie=IE9">
<title>Testanwendung</title>
<!-- die HTA- Fenstereinstellungen funktionieren nur bis content="ie=9" bei "ie=edge" funktioniert jedoch HTML5 -->
<hta:application
ID="oHTA"
applicationname="Testanwendung"
border="thin"
borderstyle="static"
caption="no" <!-- Titelzeile aus -->
contextmenu="no"
icon="no"
innerborder="no"
maximizebutton="yes"
minimizebutton="yes"
navigable="no"
scroll="no"
scrollflat="no"
selection="no"
showintaskbar="yes"
singleinstance="yes"
sysmenu="yes"
version="1.0"
windowState="normal" >
<html>
<head>
<style type="text/css">
body{
color: white; /* global Fontcolor*/
background-color: blue;
}
</style>
<script>
function Window_onLoad() {
// Fenstergrößse
window.resizeTo(800,480);
// Fensterposition
window.moveTo((screen.availWidth-screen.availWidth/2)-100,(screen.availHeight-screen.availHeight/1.5)-100);
//was sonst noch passiert
for( i=0; i<= 9; i++) {
document.getElementById("demo").innerHTML = document.getElementById("demo").innerHTML + i +' <br>';
}
}
</script>
</head>
<body onload="Window_onLoad()" >
Das steht im HTML geschrieben<br>
<br>
<div id="bla"></div>
<div id="demo"></div>
<button onclick="window.close()">schiessen</button>
</body>
</html>
Aus einer Batch kannst d eine HTA einfach mit der Zeile
start "" mshta.exe "c:\demoFolder\demo.hta"
...starten.
Hier ein Funktionierender Fullscreen-Bilbetrachter als Hta-Hybrid-Batch (funktioniert mit lokalen Bildern und OnlineAdressen):
demo.cmd
<!-- : Begin batch script diese Zeile nicht verändern!
@echo off
rem aufruf : Bildadresse Local oder Online optional: cover | contain (default) | inherit| auto| Prozentangaben: 50%% oder 100%% 100%% https://www.w3schools.com/cssref/css3_pr_background-size.asp
start "" mshta.exe "%~f0" "https://img2.dreamies.de/img/766/b/f2wn56r4me2.jpg" "cover"
rem Beispiele
::::start "" mshta.exe "%~f0" "N:\fotos\my.png"
::start "" mshta.exe "%~f0" "C:\Users\Erzesel Secure\Desktop\Esel Target.gif" "50%% 50%%"
::start "" mshta.exe "%~f0" "https://img2.dreamies.de/img/766/b/f2wn56r4me2.jpg" "auto"
rem ab hier beginnt der Bildbetrachter nichts verändern, wenn Du nicht wirklich weißt was Du tust!
exit /b
::exit /b prevent's the Batch from parsing the leftover of the batchfile
::after the next line begins the HTML/HTA itself
-->
<!DOCTYPE html>
<meta http-equiv="x-ua-compatible" content="ie=9">
<title>Testanwendung</title>
<!-- die HTA- Fenstereinstellungen funktionieren nur bis content="ie=9" bei "ie=edge" funktioniert jedoch HTML5 -->
<hta:application
ID="oHTA"
applicationname="HTA_PictureView"
border="none"
borderstyle="none"
caption="no"
contextmenu="no"
icon="no"
innerborder="no"
maximizebutton="no"
minimizebutton="no"
navigable="no"
scroll="no"
scrollflat="no"
selection="no"
showintaskbar="yes"
singleinstance="yes"
sysmenu="no"
version="1.0"
windowState="maximize">
<html>
<head>
<style type="text/css">
html,body{
margin: 0px;
height: 100%;
}
body{
color: green; /* global Fontcolor*/
background-color: #000000;
background-image: url("");
background-position: center;
background-repeat: no-repeat;
background-size: contain;
};
</style>
</head>
<body onload="Window_onLoad()" >
<!--//hidden Button at top left Corner , a little darker as the picture-->
<div style="background-color:rgba(0, 0, 0,0.05); width:30px; height:30px" id="aus" onclick="window.close()"></div>
<script>
function Window_onLoad()
{
//Cursor nach 1 Sekunde ausblenden
HideCursor(1000);
if(typeof oHTA.commandLine !== "undefined")
{
//das Handling der HTA-Kommandozeile war schon 2005 ein Horror
//teile die Kommandozeile einfach an den Quotes
argv=oHTA.commandLine.replace(/" *"/g,'"').split('"');
if ( /^\s*$/.test(argv[2]) ) {
alert ('kein Bild als 1. Parameter in der Kommandozeile: \r\n'+oHTA.commandLine)
window.close()
}
document.body.style.backgroundImage = 'url("'+argv[2].replace(/\\/g,'/')+'")'; //wandle Backslashes in Forwardslashes (Webschreibweise)
if ( !(/^\s*$/.test(argv[3])) ) {
document.body.style.backgroundSize = argv[3];
}
}
}
function HideCursor(idleTime)
{
var mouseTimer = null, cursorVisible = true;
function disappearCursor()
{
mouseTimer = null;
document.body.style.cursor = 'none';
cursorVisible = false;
}
document.onmousemove = function()
{
if (mouseTimer)
{ window.clearTimeout(mouseTimer);}
if (!cursorVisible)
{
document.body.style.cursor = 'default';
cursorVisible = true;
}
mouseTimer = window.setTimeout(disappearCursor, idleTime);
} };
</script>
</body>
</html>
zum schließen links-oben das etwas abgedunkelte Feld klicken!
Meine wohl am meisten replizierte HTA/Batch:
Natürlich kann man alles Mögliche in nahezu jeder gängigen Sprache selbst programmieren.
Nahezu jedes GUI Framework verfügt über Elemente zur Darstellung von Bildern oder Mediainhalten.
zB. C#:
- https://learn.microsoft.com/de-de/dotnet/api/system.windows.media.mediaplayer?view=windowsdesktop-8.0
- https://learn.microsoft.com/en-us/windows/communitytoolkit/controls/wpf-winforms/webview
- https://learn.microsoft.com/de-de/dotnet/api/system.windows.forms.picturebox?view=windowsdesktop-8.0
und natürlich kann man in den Frameworks bei GUI-Fenstern auch einstellen wie diese Darzustellen sind.
"Fullscreen" lässt sich sogar (mit ein Paar Tricks) sogar von "Außen" mit nahezu jedem beliebigen Fenster "aufzwingen"
(Ob das "Innenleben" eines so "vergewaltigten" Fensters mitspielt, steht auf einem ganz andern Blatt)
Ohne Programmierkenntnisse geht das alles natürlich nicht.
Dabei stellt sich mir natürlich die Frage, weshalb Du das Rad aufs Neue erfinden möchtest?
Fast jedem gängigen Browser kann man mit der F11-Taste in den Vollbildmodus schalten und es gibt diverse Videoplayer und Bildbetrachter.
...auch die Beiden verfügen über einen FullscreenModus.
Keine Ahnung was Du vorhast. oder wozu Du eine handgestrickte Anwendung benötigst?
Gibt es denn eine andere moeglichkeit eine Website oder Video auf dem Bildschirm [in Vollbild] anzeigen zu lassen ? mit Python oder so ?