Windows 11 Message Box wird nicht richtig angezeigt?
Immer wenn ich eine msgbox mit einer .vbs Datei erstelle, wird die msgbox im alten Design (alte Buttons und alte Icons) dargestellt und Umlaute werden falsch dargestellt, obwohl die UTF-8 Codierung beim speichern ausgewählt wurde. Hier ein Screenshot:
2 Antworten
Wenn man mit jahrzentealten Techniken agiert, muss man sich nicht wundern, wenn die Ergebnisse nicht so ganz modernen Erwartungen entsprechen. VBScript wird schon seit 2009 nicht mehr weiterenentwickelt, ergo verfügt es auch nur Schnittstellen ansprechen welche auf seine "Glanzzeiten" datieren.
Ich möchte eine Batch Datei erstellen, die eine Meldung (msgbox) anzeigt, ob sie ausgeführt werden soll und wenn man ja drückt, sie ausgeführt wird.
Wenn Du schon auf eine alte Technologie wie Batch verwendest, spielt es auch keine Rolle mehr, wenn der übrige Kram auch etwas "altbacken" ist.
@Taroc hat Powershell ins Spiel gebracht, allerdings hat auch das standardmäßig installierte Powershell 5.1 hinsichtlich UTF-8 so seine Tücken. (welche sich jedoch mit ein paar Tricks händeln lassen). In jedem Fall lässt sich mit Powershell wesentlich angenehmer programmieren als mit Batch ..aber damit sind wir noch immer in der Console....
Mit Powershell auf .Net-Componenten zuzugreifen ist kein Ding. Ergo kann man auch GUIs "zusammentackern."
using namespace System.Windows.Controls
using namespace System.Windows
$Global:ReturnResult='not defined'
Add-Type -AssemblyName PresentationFramework
[XML]$XAML = @"
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPFTemplate" WindowStartupLocation = "CenterScreen" SizeToContent="WidthAndHeight" ResizeMode="NoResize">
<Grid Margin="0,0,2,3">
<StackPanel Grid.Row="0">
<Label Name="Label1" Content="This is a Label control." />
<UniformGrid Name="ButtonfieldUG" Margin="10" Columns="2" HorizontalAlignment="Center" VerticalAlignment="Bottom">
<UniformGrid.Resources>
<Style TargetType="Button">
<Setter Property="OverridesDefaultStyle" Value="False" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Margin" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" >
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UniformGrid.Resources>
<Button Name="NoBtn" Content="No" />
<Button Name="YesBtn" Content="Yes" />
</UniformGrid>
</StackPanel>
</Grid>
</Window>
"@
$Window=[Windows.Markup.XamlReader]::Load(
[System.Xml.XmlNodeReader]($XAML)
)
$Label1 = $Window.FindName("Label1")
$ButtonfieldUG = $Window.FindName("ButtonfieldUG")
$ButtonfieldUG.AddHandler(
[Button]::ClickEvent,
[RoutedEventHandler]{
#was immer beim übergebenen .Source.Name geschehen soll
Write-Host $this.Name $($_) ! $($_.Source.Name) 'was clicked' -fo Green
$Global:ReturnResult=$_.Source.Name #übergabe nach draußen setzen
$Window.Close()
}
)
$Window.ShowDialog()>$Null
if ($Global:ReturnResult -eq 'YesBtn') {Write-Host " es wurde mit Ja geantwortet"}
pause
Allerhand Aufwand um lediglich Ja/Nein abzufragen...
Um einigermaßen effizient die xaml-Vorlage zu "konstruieren" braucht es VisualStudio. Und wenn man das nutzt, wäre es vernünftiger gleich mit C# oder C++ eine GUI-Anwendung aus einem Guss zu programmieren
Ob es wirklich gut ist in Powershell mit GUI-Elementen herumzwursteln, darüber scheiden sich die Geister.
Wird vermutlich am Alter von VBS liegen, ist ja auch seit 2019 von Microsoft als veraltet deklariert worden. Die GUI Funktionen werden noch aus Gründerzeit der Sprache stammen und wahrscheinlich auch auf Low Memory Usage optimiert gewesen sein. Ich bezweifle dass es einen Weg von Microsoft gibt das moderne Win11 UI mit vbs zu nutzen, weiß ich aber nicht🤷♂️
Powershell bietet zwar über die Klasse [System.Windows.Forms.MessageBox] die Möglichkeit Dialogabfragen zu erstellen, diese sehen aber nicht wirklich moderner oder besser aus als die von VBS. Auch die Umlaute sind darin weiterhin ein Problem. Eine Möglichkeit um bei Powershell zu bleiben und moderner zu werden wäre WPF zu verwenden, dadurch kannst du dein Fenster komplett frei gestalten, ist aber natürlich mit Aufwand verbunden. Wenn du dir die Arbeit nicht machen willst kannst du natürlich auch auf Grafik Bibliotheken zurückgreifen. Irgendwo stellt sich nur dann die Frage ob es nicht sinnvoller wäre auf eine andere Plattform wie bspw C#, VB oder Python umzusteigen...
Weißt du, ob es noch Alternativen gibt, mit denen man msgboxen erstellen kann?