joe2017
Goto Top

Powershell Script - Grafische Oberfläche um Anwendungen zu starten

Hallo zusammen,

ich bin auf der Suche nach einem Powershell Script welches mir eine Grafische Oberfläche anzeigt.
Bis hier hin kein Problem. Hier habe ich einige Anleitungen gefunden. Beispiel Script

Jedoch möchte ich aus dem ps Script diverse Anwendungen starten können.
Ich möchte quasi eine Icon der Anwendung sehen und nach einem klick darauf startet die Anwendung.
Als Beispiel nehmen wir mal die calc.exe und firefox.exe
Weiß zufällig jemand wie das funktioniert?

Vielen Dank für eure Hilfe.

Content-Key: 1216696996

Url: https://administrator.de/contentid/1216696996

Printed on: April 24, 2024 at 00:04 o'clock

Member: H41mSh1C0R
H41mSh1C0R Sep 01, 2021 updated at 10:15:08 (UTC)
Goto Top
moin,

Uwe sein Leitfaden kann sicher Interessant sein:
Powershell Leitfaden für Anfänger

Das verlinkte Buch enthält sicher auch etwas GUI Zeugs.

Das Buch von Tobias Weltner Powershell 5 ab Seite 1019 --> Gestalten von Benutzeroberflächen

Du könntest auf poshgui.com für 1 Woche GUIs zusammen bauen und im Quelltext anschauen wie die Elemente eingesetzt werden.

vg
Member: emeriks
emeriks Sep 01, 2021 at 10:15:22 (UTC)
Goto Top
Zitat von @H41mSh1C0R:
Uwe sein Leitfaden:
Der Dativ ist - immer noch - dem Genitiv sein Tod. face-smile
Member: colinardo
Solution colinardo Sep 01, 2021 updated at 11:02:53 (UTC)
Goto Top
Serus @joe2017,
könntest du als ganz einfaches Beispiel so machen:
# hide powershell console
Add-Type –MemberDefinition '[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);' -name Window -namespace W32  
[void][W32.Window]::ShowWindow((Get-Process -id $pid).MainWindowHandle, 0) 

# function that generates the form
function GenerateAppStarter {
    param(
        [parameter(mandatory=$true)][hashtable]$apps
    )
    # Load Assembly
    Add-Type -A System.Windows.Forms
    # Form object
    $form1 = New-Object System.Windows.Forms.Form -Property @{
        ClientSize = '400,300'  
        Text = "App-Starter"  
    }
    # list view object
    $lv = New-Object System.Windows.Forms.ListView -Property @{
        MultiSelect= $false
        Dock = 5
        View = 'LargeIcon'  
        # double click event starts associated application
        add_DoubleClick = {
            $lv.SelectedItems | %{start $_.Name}
        }
    }
    # add imagelist
    $imagelist = New-Object System.Windows.Forms.ImageList

    # add icons of apps to imagelist and add apps to listview
    $apps.GetEnumerator() | %{$cnt=0}{
        if (Test-Path $_.Value){
            $imagelist.Images.Add([System.Drawing.Icon]::ExtractAssociatedIcon($_.Value))
            [void]$lv.Items.Add($_.Value,$_.Key,$cnt)
            $cnt++
        }else{
            [System.Windows.Forms.MessageBox]::Show("App with path '$($_.Value)' does not exist!","Error",0,48)  
        }
    }
    # assign imagelist to listview
    $lv.LargeImageList = $imagelist
    # add listview to form
    $form1.Controls.Add($lv)
    # show form
    [void]$form1.ShowDialog()
}

# Assign apps with path
$myapps = [ordered]@{
    'Explorer' = 'C:\Windows\explorer.exe'  
    'Firefox' = 'C:\Program Files\Mozilla Firefox\firefox.exe'  
}

# call form function with apps
GenerateAppStarter -apps $myapps
Sieht dann in dem Fall so aus (Doppelklick auf die Icons führt die jeweilige Anwendung dann aus)

screenshot

Das war jetzt eine ganz einfache Möglichkeit mittels einer ListView und Windows Forms, mit WPF lässt sich auch noch mehr realisieren.

Grüße Uwe
Member: H41mSh1C0R
H41mSh1C0R Sep 01, 2021 at 10:52:32 (UTC)
Goto Top
OT:

Zitat von @emeriks:

Zitat von @H41mSh1C0R:
Uwe sein Leitfaden:
Der Dativ ist - immer noch - dem Genitiv sein Tod. face-smile

Nach kurzem Googeln, müsste es dann "Uwe seinem Leitfaden" heißen?
Ich war viel Kreide holen. ;)
Member: joe2017
joe2017 Sep 01, 2021 at 10:53:40 (UTC)
Goto Top
Ich habe es gefunden. Danke für den Tip.

$calc = {start calc.exe}

$button1 = New-Object system.windows.Forms.Button
$button1.Text = "Calc"  
$button1.Width = 147
$button1.Height = 32
$button1.location = new-object system.drawing.point(75,44)
$button1.Font = "Microsoft Sans Serif,10"  
$Button1.Add_Click($calc)
$Form.controls.Add($button1) 
Member: emeriks
emeriks Sep 01, 2021 at 10:58:22 (UTC)
Goto Top
Zitat von @H41mSh1C0R:
Nach kurzem Googeln, müsste es dann "Uwe seinem Leitfaden" heißen?
Knapp daneben face-wink