Wie kann man eine HTA-Datei in Batch ausführen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

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:
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
xXFrosta 
Fragesteller
 06.04.2024, 19:03

Danke fuer Ihre antwort ! :)

0
xXFrosta 
Fragesteller
 06.04.2024, 19:06

Gibt es denn eine andere moeglichkeit eine Website oder Video auf dem Bildschirm [in Vollbild] anzeigen zu lassen ? mit Python oder so ?

0
Erzesel  06.04.2024, 21:10
@xXFrosta

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#:

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?

1