none
Button zum Aktualiseren der GUI RRS feed

  • Frage

  • Hallo Zusammen,

    ich komme bei folgendem Skript nicht weiter.

    Ich suche eine Funktion für den "Aktualisieren Button", der das Skript neustartet oder aber alle aktuell installierten Drucker neu einliest. Ziel ist es, das ich das Skript eben nicht mehr selbst neustarten muss.

    $window = Add-Type -memberDefinition @"
    [DllImport("user32.dll")]
    public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    "@ -name "Win32ShowWindowAsync" -namespace Win32Functions -passThru
    $window::ShowWindow((Get-Process –id $pid).MainWindowHandle, 0)
        
        $Printers = Get-WmiObject -Class Win32_Printer | Select-Object -ExpandProperty name
        $currentPrinter = Get-WmiObject -Query " SELECT * FROM Win32_Printer WHERE Default=$true" | Select-Object -ExpandProperty name
            
        Add-Type -AssemblyName System.Windows.Forms    

        $Form = New-Object system.Windows.Forms.Form        
        $Form.Text = "Standard Drucker Einstellung"
        $Form.BackColor = "#d7ebfe"
        $Form.TopMost = $true
        $Form.Width = 1000
        $Form.Height = 500
        $Form.StartPosition = "CenterScreen"
        $Icon = [system.drawing.icon]::ExtractAssociatedIcon($PSHOME + "\powershell.exe")
        $Form.Icon = $Icon
        $lb_availablePrinters = New-Object system.windows.Forms.Label
        $lb_availablePrinters.Text = "verfügbare Drucker"
        $lb_availablePrinters.AutoSize = $true
        $lb_availablePrinters.Width = 10
        $lb_availablePrinters.Height = 10
        $lb_availablePrinters.location = new-object system.drawing.point(17,117)
        $lb_availablePrinters.Font = "Verdana,20"
        $Form.controls.Add($lb_availablePrinters)

        $lb_defaultPrinter = New-Object system.windows.Forms.Label
        $lb_defaultPrinter.Text = "aktueller Drucker"
        $lb_defaultPrinter.AutoSize = $true
        $lb_defaultPrinter.Width = 25
        $lb_defaultPrinter.Height = 10
        $lb_defaultPrinter.location = new-object system.drawing.point(450,117)
        $lb_defaultPrinter.Font = "Verdana,20"
        $Form.controls.Add($lb_defaultPrinter)   

        $bt_close = New-Object system.windows.Forms.Button
        $bt_close.Text = "Schließen"
        $bt_close.ForeColor = "White"
        $bt_close.BackColor = "Red"
        $bt_close.Cursor = [System.Windows.Forms.Cursors]::Hand
        $bt_close.Width = 145
        $bt_close.Height = 33
        $bt_close.Add_Click({
        $Form.Close()
        })
        $bt_close.location = new-object system.drawing.point(800,374)
        $bt_close.Font = "Verdana,15,style=Bold"
        $Form.controls.Add($bt_close)
        
        $v_printer = New-Object system.windows.Forms.Button
        $v_printer.Text = "Übersicht verfügbare Drucker"
        $v_printer.AutoSize = $true
        $v_printer.ForeColor = "Black"
        $v_printer.backColor = "White"
        $v_printer.Cursor = [System.Windows.Forms.Cursors]::Hand
        $v_printer.Width = 960
        $v_printer.Height = 33
        $v_printer.Add_Click({
        start-process "\\serverxy\druckerübersicht\"
        })
        $v_printer.location = new-object system.drawing.point(10,28)
        $v_printer.Font = "Verdana,15,style=Bold"
        $Form.controls.Add($v_printer)

       $CHANGEButton = new-object System.Windows.Forms.Button
       $CHANGEButton.Location = new-object System.Drawing.Size(20,330)
       $CHANGEButton.Size = new-object System.Drawing.Size(150,20)
       $CHANGEButton.Text = "Aktualisieren"
       $CHANGEButton.ForeColor = "Black"
       $CHANGEButton.backColor = "White"
       $CHANGEButton.Add_Click({ALL})
       $Form.Controls.Add($CHANGEButton)

        $lb_printer = New-Object system.windows.Forms.Label
        $lb_printer.Text = "$currentPrinter"
        $lb_printer.AutoSize = $true
        $lb_printer.Width = 350
        $lb_printer.Height = 50
        $lb_printer.location = new-object system.drawing.point(450,186)
        $lb_printer.Font = "Verdana,15"
        $Form.controls.Add($lb_printer)
       
        $lstBX_printers = New-Object system.windows.Forms.ListBox
        $lstBX_printers.Width = 300
        $lstBX_printers.Height = 144
        $lstBX_printers.location = new-object system.drawing.point(20,186)
        foreach ($Printer in $Printers)
        {
            $lstBX_printers.Items.Add($Printer)
        }
        $lstBX_printers.Add_Click({
            $Global:currentPrinter = $lstBX_printers.SelectedItem
        })
        $Form.controls.Add($lstBX_printers)
        $bt_setDefault = New-Object system.windows.Forms.Button
        $bt_setDefault.Text = "als Standard einrichten"
        $bt_setDefault.ForeColor = "White"
        $bt_setDefault.BackColor = "Green"
        $bt_setDefault.Cursor = [System.Windows.Forms.Cursors]::Hand
        $bt_setDefault.Width = 300
        $bt_setDefault.Height = 33
        $bt_setDefault.Add_Click({
            (New-Object -ComObject WScript.Network).SetDefaultPrinter($Global:currentPrinter)
            $lb_printer.Text = "$Global:currentPrinter"
            $lb_printer.Refresh()
        })
        $bt_setDefault.location = new-object system.drawing.point(20,373)
        $bt_setDefault.Font = "Verdana,12,style=Bold"
        $Form.controls.Add($bt_setDefault)
        [void]$Form.ShowDialog()
        $Form.Dispose()
        

        
        
        
       


    • Bearbeitet chkdsk90 Freitag, 15. November 2019 06:38
    Freitag, 15. November 2019 06:37

Antworten

  • Da musst du die Logok ein wenig umstellen:

    Packe das Laden der Daten in eine Funktion.
    Dann kannst du beinm Click-Event des Aktualisierungsbutton einfach die Funktion aufrufen.
    Du must dem Click-Event einen Funktionsaufruf zuweisen.

    Das Problem ist, das durch ShowDialog() das Script angehalten wird bis der Dialog beendet wird.
    Von nun an läuft alles nur noch per Ereignis (Event).

    Freitag, 15. November 2019 11:52