Batch GIU?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

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