Windows 11 Message Box wird nicht richtig angezeigt?

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.

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

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🤷‍♂️


flo2342 
Beitragsersteller
 26.12.2024, 21:04

Weißt du, ob es noch Alternativen gibt, mit denen man msgboxen erstellen kann?

Taroc  26.12.2024, 21:06
@flo2342

In Verbindung mit welcher Plattform/ Sprache?

flo2342 
Beitragsersteller
 26.12.2024, 21:19
@Taroc

Also, eine msgbox, die wie bei vbs funktioniert nur mit windows 11 design.

flo2342 
Beitragsersteller
 26.12.2024, 21:22
@flo2342

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.

Taroc  26.12.2024, 22:40
@flo2342

Mit Powershell kann man soweit ich weiß auch modernere Message Boxen erstellen

flo2342 
Beitragsersteller
 26.12.2024, 22:43
@Taroc

Weißt du, wie das geht?

Taroc  26.12.2024, 23:01
@flo2342

Ich meld mich später nochmal zurück, kann grad nicht

Taroc  27.12.2024, 01:37
@flo2342

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...