Reload oder Restart Button in der GUI
Moin Zusammen,
folgendes Skript ist vorhanden.
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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 515681
Url: https://administrator.de/contentid/515681
Ausgedruckt am: 24.11.2024 um 08:11 Uhr
4 Kommentare
Neuester Kommentar
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 ...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.
$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()