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-ID: 1216696996

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

Ausgedruckt am: 21.11.2024 um 18:11 Uhr

H41mSh1C0R
H41mSh1C0R 01.09.2021 aktualisiert um 12:15:08 Uhr
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
emeriks
emeriks 01.09.2021 um 12:15:22 Uhr
Goto Top
Zitat von @H41mSh1C0R:
Uwe sein Leitfaden:
Der Dativ ist - immer noch - dem Genitiv sein Tod. face-smile
colinardo
Lösung colinardo 01.09.2021 aktualisiert um 13:02:53 Uhr
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
H41mSh1C0R
H41mSh1C0R 01.09.2021 um 12:52:32 Uhr
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. ;)
joe2017
joe2017 01.09.2021 um 12:53:40 Uhr
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) 
emeriks
emeriks 01.09.2021 um 12:58:22 Uhr
Goto Top
Zitat von @H41mSh1C0R:
Nach kurzem Googeln, müsste es dann "Uwe seinem Leitfaden" heißen?
Knapp daneben face-wink