dispatcher
Goto Top

Reload oder Restart Button in der GUI

Moin Zusammen,

folgendes Skript ist vorhanden.

$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  -  Klick mich"  
    $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 "\\serverxyz\info\drucker"  
    })
    $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()	

Hintergrund ist der. Die User starten das Skript. Sehen alle aktuell installierten Drucker und können den Standarddrucker ändern. Über den oberen Link können Sie neue Drucker hinzufügen. Der Button "Aktualisieren" soll nach der Installation den neuen Drucker mit anzeigen. Jetzt kann man entweder das Skript neustarten oder liest die installierten Drucker neu aus. Allerdings fehlt mir hierzu eine Idee/Code dem Button diese Funktion zuzuweisen.
Habt ihr eine Idee hierfür?

Besten Dank im Voraus.

Content-Key: 515681

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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: SlainteMhath
SlainteMhath 15.11.2019 um 11:04:34 Uhr
Goto Top
Moin,

du könntest den Code der die Drucker ausliest und anzeigt in eine Funktion packen die du dann einfach nochmal über den entsprechenden Button aufrufst (Voerher ggfs. die Controls clearen)

lg,
Slainte
Mitglied: dispatcher
dispatcher 15.11.2019 um 11:07:56 Uhr
Goto Top
Das habe ich schon probiert. Wenn ich den Code in eine Funktion packe und übergebe, ist in der GUI das Fenster, was mir alle aktuell installierten Drucker anzeigt, leer.
Mitglied: 141815
Lösung 141815 15.11.2019 aktualisiert um 12:13:50 Uhr
Goto Top
Zitat von @dispatcher:

Das habe ich schon probiert. Wenn ich den Code in eine Funktion packe und übergebe, ist in der GUI das Fenster, was mir alle aktuell installierten Drucker anzeigt, leer.
Dann has'es janz falsch jemach ...
$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) 

function Refresh-Printers {
    $Printers = Get-WmiObject -Class Win32_Printer
    $lstBX_printers.Items.Clear()
    $lstBX_printers.Items.AddRange(@($Printers.Name))
    $global:currentPrinter = ($Printers | ?{$_.Default}).Name
    $lb_printer.Text = $global:currentPrinter
}

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"  
$form.Add_Load({
    Refresh-Printers
})
$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  -  Klick mich"  
$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 "\\serverxyz\info\drucker"  
})
$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({Refresh-Printers})
$Form.Controls.Add($CHANGEButton)

$lb_printer = New-Object system.windows.Forms.Label
$lb_printer.Text = $global: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)
$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({
    if ($lstBX_printers.SelectedIndex -ne -1){
        (New-Object -ComObject WScript.Network).SetDefaultPrinter($lstBX_printers.SelectedItem)
        Refresh-Printers
    }
})
$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()
Mitglied: dispatcher
dispatcher 20.11.2019 um 11:58:11 Uhr
Goto Top
Hat wunderbar funktioniert. Besten Dank!