Batch Script in "richtiges" Programm umwandeln?

4 Antworten

Du kannst innerhalb von Visual Studio eine neue Windows-Form-Anwendung erstellen und bindest dein Batch Script anschließend als Ressource ein. Du kannst im Grunde auf alle Dienste und Anwendungen zurückgreifen, die bereits von Windows bereitgestellt werden. Darunter auch die Eingabeaufforderung (CMD) und PowerShell.

In der Windows-Form-Anwendung erstellst du dann anschließend ein "Event", bei dem dein Batch Script ausgeführt werden soll. Das einfachste Beispiel wäre wohl ein platzierter Button, über den dann die Ausführung des Scripts angestoßen wird. Such einfach mal nach "execute batch file from/with windows form app" oder ähnlichem.

Falls du auf C# und Windows-Form-Anwendungen überhaupt kein Bock hast und es dir bloß um ein GUI für dein Batch Script geht, könntest du auch ein Framework wie Electron verwenden. Dein GUI baust du dann einfach in/mit HTML und CSS. Schau dir das Framework ruhig mal an, wenn es sich für dich interessant anhört.

LG medmonk

Woher ich das weiß:Berufserfahrung – UI/UX Designer, Full-Stack Developer
Nutzer4596 
Fragesteller
 06.11.2022, 05:48
Falls du auf C# und Windows-Form-Anwendungen überhaupt kein Bock hast und es dir bloß um ein GUI für dein Batch Script geht,

Genau das ist es im Endeffekt. Trotz dessen das ich, wie ich finde, einen sehr guten Job gemacht habe was das design des Skripts angeht möchte ich langsam immer mehr das design verbessern. Das geht aber nicht aufgrund der starken Limitationen im Design Bereich der CMD. Deswegen der Gedanke das ich, auch wenn ich keine Ahnung davon habe, eine Windows Forms App erstelle in der man dann nicht nur ein simples CMD Menu hat sondern auch zb. Previews zu bilden und Videos sieht, Buttons auf die man klicken kann hat usw.
(Es geht um den Background Changer den ich erstelle)

Könntest du mir bitte bitte etwas über das Framework / generell Frameworks erklären da ich davon ebenfalls keine Ahnung habe. Im Grunde kenne ich mich lediglich etwas mit CMD befehlen aus und das wars.

Ansonsten vielen vielen dank für den Hinweis auf das Framework!

0
medmonk  06.11.2022, 07:00
@Nutzer4596
in der man dann nicht nur ein simples CMD Menu hat sondern auch zb. Previews zu bilden und Videos sieht, Buttons auf die man klicken kann hat usw.

Dein Vorhaben ist schon etwas komplexer, da wirst du alleine mit Batch und Windows Form nicht allzu weit kommen. Ohne entsprechendes Wissen wird es ohnehin schwierig, da du dir schon alles zusammensuchen müsstest.

Könntest du mir bitte bitte etwas über das Framework / generell Frameworks erklären da ich davon ebenfalls keine Ahnung habe.

Electron basiert auf Chromium und NodeJS und erlaubt es dir, native Desktopanwendung mithilfe von Webtechnologien wie JavaScript, HTML und CSS zu bauen. Selbst Spotify, Discord, WhatsApp (Desktop) und mehrere dutzend weitere Apps wurden bereits so schon mithilfe von Electron umgesetzt.

Im Grunde fungiert der "Chromium-Browser" als Container, in dem dann eigene Programme ausgeführt werden. In einer Electron-basierten App könntest du ebenso das Ausführen von Batch Scripten auslösen. Für das UI wäre dann auch etwas wie Bootstrap oder ähnliches möglich. Damit kannst du dir dann Stück für Stück deine Oberfläche zusammen klicken. Dafür reicht eigentlich etwas Grundlagenwissen und etwas Einlesen aus.

1
Erzesel  06.11.2022, 11:00
@Nutzer4596

warum verlinkst Du auf eine Seite, welche statt des erwähnten Wallpaper-Tools einen Installer für Valorant anbietet.

 if (@CodeSection == @Batch) @then
@echo off
echo Please select Valorant Installation Directory (The Folder named VALORANT that contains the VALORANT.exe)
echo.
... usw...
var title = "Please select Valorant Installation Directory (The Folder named VALORANT in full Caps)", rootFolder = 0;
var shl = new ActiveXObject("Shell.Application");
var folder = shl.BrowseForFolder(0, title, 0, rootFolder);
WScript.Stdout.WriteLine(folder ? folder.self.path : "");

Mehr brauchte ich nicht inspizieren!

Was soll der Mist?
1
Nutzer4596 
Fragesteller
 06.11.2022, 11:21
@Erzesel

Das ist kein installer für Valorant... Das ist der installer für MEIN Background Changer FÜR Valorant. 😂

Der Code den du copy pasted hast dient dazu das mein Bankground Changer weis wo das Spiel genau installiert ist. Nicht jeder hat es nunmal am selben ort installiert.

1
Von Experte medmonk bestätigt

Batch in ein echtes C#-Programm zu konvertieren geht nicht.

Das von medmonk vorgeschlagene Aufrufen einer Batch aus einer C#/Forms-Anwendung heraus , bezeichne ich gen als:

"Mit dem Ferrari bis zur Straßenecke fahren und auf ein rostiges Fahrrad umsteigen"

Der größte Unsinn den man machen kann! Logisch ist machbar, zeigt jedoch nur, das der Programmierer bestenfalls den Formseditor beherrscht, jedoch nicht C# (warum sonst sollte man auf eine schwächere Sprache zurückgreifen?)😣

Andersherum macht die Sache Sinn: aus Batch heraus kann ich sehr wohl ein Programm in einer Höheren Sprache generieren/compilieren . (und darauf zugreifen)

(Es geht um den Background Changer den ich erstelle)

WTF..3GB Downloaden? Was willst Du uns da unterjubeln?

(ich habe bei habe Deinen Installer mal zerlegt ohne ihn Auszufüheren! (ich brache Valorant nicht!!!)

Ein solches Progrämmchen, welches ein Wallpaper setzt, bekomme ich mit 50 Zeilen/1800Zeichen hin. (inclusive Compiler)

C#_Hybrid_demo1.cmd

/* 2>nul ||@cls  diese  zeile nicht ändern 
@echo off
if exist "Set Wallpaper.exe" goto :exec
rem compile angehängten c#-Code
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d  /o:-n "%SystemRoot%\Microsoft.NET\Framework\*csc.exe"') do (
    "%%v" -nologo /out:"Set Wallpaper.exe" %0
)
:exec
"Set Wallpaper.exe"
exit /b %errorlevel%


rem Die nächste Zeile ist wichtig nicht ändern!
::::C#code */
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;


class Program
{
     //definiere interface für Systemfunktion: https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-systemparametersinfow
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);


    static void SetWallPaper( string PicturePath )
    {
        SystemParametersInfo( 0x014, 0, PicturePath ,  3);
    }
    
    [STAThread]   //SingleThreaded, wichtig für csc.exe (c#-compiler version 5), sonst bleibt der Dialog unsichtbar in einem ParallelThread hängen!
    static void Main(string[] args)
    {
        if(args.Length==0)
        {
            OpenFileDialog FileDialog = new OpenFileDialog();
            FileDialog.Multiselect = false;
            FileDialog.Title = "Open Wallpaper";
            FileDialog.Filter = "Image Files (*.bmp;*.jpg;*.jpeg,*.png)|*.BMP;*.JPG;*.JPEG;*.PNG";
            if (FileDialog.ShowDialog() == DialogResult.OK)
            {                     
                SetWallPaper(FileDialog.FileName);
            }
            FileDialog.Dispose();
        }
        else
        {
            SetWallPaper( args[0]  );
        }
    }
}

...nicht kritisieren wg. des "veralteten" Compilers/Framwork, damit stelle ich lediglich sicher, dass die Batch auf jedem System >= Win 7 funktioniert C#5 ist Systemstandard!

FomsTest.cmd

/* 2>nul ||@cls
@echo off
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d  /o:-n "%SystemRoot%\Microsoft.NET\Framework\*csc.exe"') do (set "csc=%%v")
"%csc%"  /nologo /platform:anycpu /target:winexe /out:"%~n0.exe" "%~f0" 
start "" "%~n0.exe"
exit /b %errorlevel%
rem Die nächste Zeile ist wichtig nicht ändern!
::::C#code */


using System;
using System.Drawing;
using  System.Windows.Forms;


class Test : Form{
    public Test(){
        this.Text = "Eine Esel App";
        ClientSize = new Size(320, 240);
        Label foo = new Label(){Text="Hallo Welt"};
        Controls.Add(foo);
    }

    public static void Main(string[] args){
        Application.Run(new Test());
    }
}

Das hat aber nichts mit Konvertieren oder dergleichen zu tun.

Das ganze ist eigentlich nur eine Krücke, um ohne VisualStudio oder dergleichen zu installieren ein sauberes Programm vor Ort zu complilieren.

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Nutzer4596 
Fragesteller
 06.11.2022, 11:16

Ich bin einfach nur absolut verwirrt. Ich glaube mein Kopf explodiert gleich von dem ganzen code haha

WTF..3GB Downloaden? Was willst Du uns da unterjubeln?

Der Installer ist 3GB groß aufgrund der ganzen Datein die mit dabei sind. Mehr als 45 Wallpaper eben. Ich bin aber gerade dabei eine Version zu erstellen bei der man jedes Wallpaper im Background Changer selbst einzeln runterladen kann.

(ich brache Valorant nicht!!!)

hä?

Ein solches Progrämmchen, welches ein Wallpaper setzt, bekomme ich mit 50 Zeilen/1800Zeichen hin. (inclusive Compiler)

Es geht, falls du das denkst, nicht um Windows wallpaper.

Valorant ist ein ego shooter. In diesem gibt es, wer hätte es gedacht, ein Hauptmenü. In diesem wird immer ein Video im loop abgespielt. Mein Background Changer ersetzt einfach nur die Video Datei im Spielverzeichnis mit einen der Wallpaper die mit dem installer eben mit installiert werden.

0
Erzesel  06.11.2022, 11:37
@Nutzer4596

Ich lasse mal den ganzen Prgammtechnischn Kram beiseite.

Es gab gute Günde, weshalb ich Deinen "Installer" mit einem anderen Programm "geschlachtet" habe, statt einfach mal zum Test zu Installieren.

Dein Installer fordert ohne jeden Disclaimer oder Impressum Adminrechte. Ein absolutes NoGo.

Ich wundere mich schon lange nicht mehr über kollabierende Windowssystem und Viren. Wenn leute m blinden Vertrauen auf einen Unbekannten Installer komplett ihr System öffnen!

Vielleicht sollte ich auch mal ein paar "nette" Installer in die Welt schicken... 😈
0
Nutzer4596 
Fragesteller
 06.11.2022, 11:42
@Erzesel
Vielleicht sollte ich auch mal ein paar "nette" Installer in die Welt schicken... 😈

Wieso den auch? Ich dachte du hast meinen zerlegt. Da solltest du doch bemerkt haben das da nichts dran ist. Ich gehe sehr stark davon aus das er lediglich die Admin rechte will, da alles im Dokumente Ordner installiert wird und das ja ein geschützter Ordner ist. Zumindest ist das der Grund warum bei mir, beim nutzen des installers immer bei der ersten Datei mein Anti Virus bescheid gibt.

0
einen sehr guten Job gemacht habe was das design des Skripts angeht möchte ich langsam immer mehr das design verbessern. Das geht aber nicht aufgrund der starken Limitationen im Design Bereich der CMD.

Wäre es dann nicht angebracht und ziemlich cool Du würdest C# lernen und als großes Lernziel ist es dein batch Script in C# zu konvertieren?

Natürlich hat dein prozedurales batch Scripts nichts mit einer so potenten OOP Sprache zu tun, du müsstest erstmal die Grundlagen angehen.

Ich würde behaupten es gibt wenig, das du in Batch, aber nicht mit C# machen kannst. Von daher ja, grundsätzlich möglich.

Die Arbeit müsstest du dir aber selbst machen, weil es dafür keinen einfachen Konverter gibt.

Woher ich das weiß:Berufserfahrung – Berufserfahrung