Batch GIU?
Hallo ich wollte mall wissen wie man eine anklickbare Batch GUI erstelt
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Batch, cmd, PowerShell
Es gibt zwar Hybridlösungen, bei denen ein externes Programm eine GUI bereitstellt und deinen Rückgabewert an die Batch übergibt, im Prinzip wäre das aber, als würdest mit einem Rostigen Fahrrad losfahren, auf eien Ferrari umsteigen , einmal ums Dorf fahren um anschließend wieder mit dem klapprigen Rad weiterzufahren.
HybridDemo.cmd
<# : Batch Abschnitt ,Batch sieht in dieser Zeile die Eingabe aus der Datei # an ein SprungLabel, Powershell sieht den begin eines Kommentars.
@echo off
echo ich bin die Batch "%0"
echo starte jetzt Poweshellscript...
for /f "tokens=*" %%a in ('powershell "iex (gc '%~f0' -Raw | out-string)"') do (
echo zuruek in der Batch
echo die GUI liefert "%%a" ...
)
pause
exit /b
: Ende Batch und Powershellkommentar #>
Add-Type -AssemblyName System.Windows.Forms
$Global:Result
$Form = New-Object System.Windows.Forms.Form
$Form.Text = 'Irgendwas'
$Form.Size = '400,200'
$Form.StartPosition = 'manual'
$Form.Location = '100,100'
$BlahButton = New-Object System.Windows.Forms.Button
$BlahButton.Location = '10,10'
$BlahButton.Size = '250,20'
$BlahButton.Text = 'Blah'
$BlahButton_Action={
$Global:Result='blah'
$Form.Close()
}
$BlahButton.Add_Click( $BlahButton_Action )
$Form.Controls.Add($BlahButton)
$blubbButton = New-Object System.Windows.Forms.Button
$blubbButton.Location = '10,30'
$blubbButton.Size = '250,20'
$blubbButton.Text = 'Blubb'
$blubbButton_Action={
$Global:Result='blubb'
$Form.Close()
}
$blubbButton.Add_Click( $blubbButton_Action )
$Form.Controls.Add($blubbButton)
$Null=$Form.ShowDialog()
$Global:Result
Du findest Das Schwachsinn... Ich auch
Aber Du wolltest doch Batch...
PowerShell ist viel leichter als Batch zu handhaben:
demo.ps1
#console ausblenden
$user32=Add-Type -m '[DllImport("user32.dll")] public static extern void ShowWindow(IntPtr hWnd, int nCmdShow);' -Name myAPI -passthru
$hwnd=(gps -id $PID).MainWindowHandle
$user32::ShowWindow($hwnd, 0)
#GUI einrichten und starten
Add-Type -AssemblyName System.Windows.Forms
$Form = New-Object System.Windows.Forms.Form
$Form.Text = 'Irgendwas'
$Form.Size = '400,200'
$Form.StartPosition = 'manual'
$Form.Location = '100,100'
$blubbButton = New-Object System.Windows.Forms.Button
$blubbButton.Location = '10,10'
$blubbButton.Size = '250,20'
$blubbButton.Text = 'Starte NotePad'
$BlahButton_Action={
Start-Process 'Notepad'
}
$blubbButton.Add_Click( $BlahButton_Action )
$Form.Controls.Add($blubbButton)
$blubbButton = New-Object System.Windows.Forms.Button
$blubbButton.Location = '10,40'
$blubbButton.Size = '250,20'
$blubbButton.Text = 'Starte den Registryeditor'
$blubbButton_Action={
Start-Process 'regedit'
}
$blubbButton.Add_Click( $blubbButton_Action )
$Form.Controls.Add($blubbButton)
$Null=$Form.ShowDialog()
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren