Powershell: .ani Datei anzeigen?
Hallo zusammen,
seit kurzem beschäftige ich mich mit Powershell und erstelle eine GUI zur Installation der im eigenen Windows Image integrierten Programme.
Leider hänge ich gerade an der Stelle, wenn mit "Get-Job -state Running" der Windows eigene animierte Cursor (.ani) bis zum "Get-Job -state Completed" und dem setzen des "ok.png" dargestellt werden soll.
Den Cursor bekomme ich gar nicht angezeigt.
Bin ich auf dem Holzweg oder habe ich nur was übersehen?
Weiter würde ich gerne, den Namen, von dem Programm, welches gerade installiert wird, für diese Zeit fett (style=Bold) darstellen.
Hat auch hier jemand einen Tipp, wie ich das sinnvoll umsetzen kann?
Vielen Dank für Eure Unterstützung.
seit kurzem beschäftige ich mich mit Powershell und erstelle eine GUI zur Installation der im eigenen Windows Image integrierten Programme.
Leider hänge ich gerade an der Stelle, wenn mit "Get-Job -state Running" der Windows eigene animierte Cursor (.ani) bis zum "Get-Job -state Completed" und dem setzen des "ok.png" dargestellt werden soll.
Den Cursor bekomme ich gar nicht angezeigt.
Bin ich auf dem Holzweg oder habe ich nur was übersehen?
Weiter würde ich gerne, den Namen, von dem Programm, welches gerade installiert wird, für diese Zeit fett (style=Bold) darstellen.
Hat auch hier jemand einen Tipp, wie ich das sinnvoll umsetzen kann?
Vielen Dank für Eure Unterstützung.
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
# Name Programme
$Name_01 = "Visual C++ 2010 x64 Redistributable"
$Name_02 = "Visual C++ 2015 x64 Redistributable"
$Name_03 = "Microsoft .NET Framework"
$Name_04 = "Microsoft XML Basisdienste"
$Name_05 = ""
$Name_06 = ""
$Name_07 = ""
$Name_08 = ""
$Name_09 = ""
$Name_10 = ""
$Name_11 = ""
$Name_12 = ""
$Name_13 = ""
$Name_14 = ""
$Name_15 = ""
$Name_16 = ""
$Name_17 = ""
$Name_18 = ""
$Name_19 = ""
$Name_20 = ""
$Name_21 = ""
$Name_22 = ""
# Programme
$Pfad_01 = { Start-Process "C:\Software\Microsoft\Visual C++ 2010 x64 Redistributable\VisualC++Redistributable.vbs" -Wait }
$Pfad_02 = { Start-Process "C:\Software\Microsoft\Visual C++ 2015 x64 Redistributable\VisualC++Redistributable.vbs" -Wait }
$Pfad_03 = { Start-Process "C:\Software\Microsoft\Microsoft .NET Framework\.NET Framework 4.6\Microsoft.NETFramework.vbs" -Wait}
$Pfad_04 = { Start-Process "C:\Software\Microsoft\Microsoft XML Basisdienste\MicrosoftXMLBasisdienste.vbs" -Wait }
$Pfad_05 =
$Pfad_06 =
$Pfad_07 =
$Pfad_08 =
$Pfad_09 =
$Pfad_10 =
$Pfad_11 =
$Pfad_12 =
$Pfad_13 =
$Pfad_14 =
$Pfad_15 =
$Pfad_16 =
$Pfad_17 =
$Pfad_18 =
$Pfad_19 =
$Pfad_20 =
$Pfad_21 =
$Pfad_22 =
# Bilder
$Bild_01 = "$PSScriptRoot\Bilder\Bild_01.ico"
$Bild_02 = "$PSScriptRoot\Bilder\Bild_02.png"
$Bild_03 = "$PSScriptRoot\Bilder\Bild_03.png"
$Bild_04 = "$PSScriptRoot\Bilder\ok.png"
$Bild_05 = "$PSScriptRoot\Bilder\nok.png"
$Bild_06 = "$PSScriptRoot\Bilder\busy.ani"
# Fenster
$objForm = New-Object System.Windows.Forms.Form
$objForm.StartPosition = "CenterScreen"
$objForm.Size = New-Object System.Drawing.Size(1000,600)
$objForm.Text = "Windows Setup"
$objForm.BackColor = "white"
$objForm.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon("$Bild_01")
$objForm.Opacity = 0.9 # Durchsichtigkeit 1=100% 0.1=10
$objForm.Topmost = $true
$objForm.ShowInTaskbar=$false
$objForm.MaximizeBox = $false
$objForm.MinimizeBox = $false
$objForm.ControlBox = $true
$objForm.ShowIcon = $true
$objForm.Visible = $true
# Linie (oben)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(0,0)
$objLabel.Size = New-Object System.Drawing.Size(1000,20)
$objLabel.BackColor = "lightblue"
$objForm.Controls.Add($objLabel)
# Bild (links)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(25,40)
$objLabel.Size = New-Object System.Drawing.Size(256,256)
$objLabel.BackColor = "white"
$objLabel.Image = [System.Drawing.Image]::FromFile("$Bild_02")
$objForm.Controls.Add($objLabel)
# Textfeld (oben)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(340,40)
$objLabel.Size = New-Object System.Drawing.Size(500,30)
$objLabel.Font = "Arial Unicode MS, 14"
$objLabel.ForeColor = "black"
$objLabel.Text = "Programme werden installiert..."
# $objLabel.Name = "Programme werden installiert..."
$objForm.Controls.Add($objLabel)
# Bild (rechts)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(700,260)
$objLabel.Size = New-Object System.Drawing.Size(256,256)
$objLabel.BackColor = "white"
$objLabel.Image = [System.Drawing.Image]::FromFile("$Bild_03")
$objForm.Controls.Add($objLabel)
# Linie (unten)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(0,540)
$objLabel.Size = New-Object System.Drawing.Size(1000,20)
$objLabel.BackColor = "lightblue"
$objForm.Controls.Add($objLabel)
# Programme starten...
# Textfeld Programm 01
if (-not $Name_01) { Exit }
else
{
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(345,80)
$objLabel.Size = New-Object System.Drawing.Size(240,20)
$objLabel.BackColor = "white"
$objLabel.Font = "Arial Unicode MS, 10" #, style=Bold
$objLabel.ForeColor = "black"
$objLabel.Text = "$Name_01"
# $objLabel.Name = "Name_01"
$objForm.Controls.Add($objLabel)
$objForm.Show()
if ($objLabel.Text = "$Name_01")
{
$Name_01 = Start-Job $Pfad_01
Wait-Job -Job $Name_01
Receive-Job $Name_01
if (Get-Job -state Running)
{
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(585,82)
$objLabel.Size = New-Object System.Drawing.Size(16,16)
$objLabel.Image = [System.Drawing.Image]::FromFile("$Bild_06")
$objForm.Controls.Add($objLabel)
$objForm.Show()
}
if (Get-Job -state Completed)
{
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(585,82)
$objLabel.Size = New-Object System.Drawing.Size(16,16)
$objLabel.Image = [System.Drawing.Image]::FromFile("$Bild_04")
$objForm.Controls.Add($objLabel)
}
else
{
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(585,82)
$objLabel.Size = New-Object System.Drawing.Size(16,16)
$objLabel.Image = [System.Drawing.Image]::FromFile("$Bild_05")
$objForm.Controls.Add($objLabel)
$objForm.Show()
}}}
Remove-Job $Name_01
# Textfeld Programm 02
if (-not $Name_02) { Exit }
else
{
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(345,100)
$objLabel.Size = New-Object System.Drawing.Size(240,20)
$objLabel.BackColor = "white"
$objLabel.Font = "Arial Unicode MS, 10"
$objLabel.ForeColor = "black"
$objLabel.Text = "$Name_02"
# $objLabel.Name = "Name_02"
$objForm.Controls.Add($objLabel)
$objForm.Show()
if ($objLabel.Text = "$Name_02")
{
$Name_02 = Start-Job $Pfad_02
Wait-Job -Job $Name_02
Receive-Job $Name_02
if (Get-Job -state Running)
{
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(585,102)
$objLabel.Size = New-Object System.Drawing.Size(16,16)
$objLabel.Image = [System.Drawing.Image]::FromFile("$Bild_06")
$objForm.Controls.Add($objLabel)
$objForm.Show()
}
if (Get-Job -state Completed)
{
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(585,102)
$objLabel.Size = New-Object System.Drawing.Size(16,16)
$objLabel.Image = [System.Drawing.Image]::FromFile("$Bild_04")
$objForm.Controls.Add($objLabel)
}
else
{
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(585,102)
$objLabel.Size = New-Object System.Drawing.Size(16,16)
$objLabel.Image = [System.Drawing.Image]::FromFile("$Bild_05")
$objForm.Controls.Add($objLabel)
$objForm.Show()
}}}
Remove-Job $Name_02
...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 300309
Url: https://administrator.de/contentid/300309
Ausgedruckt am: 27.11.2024 um 13:11 Uhr
10 Kommentare
Neuester Kommentar
Cursor setzen:
Text eines Labels zur Laufzeit fett machen:
Gruß jodel32
$objForm.Cursor = [System.Windows.Forms.Cursors]::WaitCursor
$objLabel.Font = new-object System.Drawing.Font($objLabel.Font,[System.Drawing.FontStyle]::Bold)
Und zum laden eines ANI-Cursors kann man das so machen
Add-Type -MemberDefinition @"
[DllImport("user32.dll")]
public static extern IntPtr LoadCursorFromFile(String lpFileName);
"@ -Namespace "MyWin32" -Name "LoadCursor"
$objForm.Cursor = [MyWin32.LoadCursor]::LoadCursorFromFile('C:\Windows\Cursors\aero_busy.ani')
$objLabel.Cursor = [MyWin32.LoadCursor]::LoadCursorFromFile('$Bild_06')
Kein Wunder, du verwendest fälschlicherweise eine Variable zwischen einfachen Hochkommas! Das kann nicht funktionieren, da Variablen nur zwischen normalen Anführungszeichen expandiert werden.
Außerdem brauchst du hier sowieso keinerlei Anführungszeichen!!
Außerdem ist das definieren von jeweils einer Variablen für jede Software sehr schlechtes Coding.
Das macht man mit einem Array und iteriert dann mit einer For-Each-Schleife über dieses Array.
Da das ja sowieso Installationen sind und davon immer nur eine Laufen sollte ist das ja kein Problem.
Damit deine UI aber responsive bleibt solltest du dich mal mit Powershell-Multithreading auseinander setzen.
Dazu gibt es hier im Forum diverse Beiträge, einfach mal die Suche anwerfen. Wir müssen ja nicht jedes mal das Rad neu erfinden!
Gruß jodel32
Tja, weil du laut deinem geposteteten Code den benötigten C-Sharp-Code nicht geladen hast
Geht hier einwandfrei, guckst du dieses Beispiel:
Geht hier einwandfrei, guckst du dieses Beispiel:
Add-Type -MemberDefinition @"
[DllImport("user32.dll")]
public static extern IntPtr LoadCursorFromFile(String lpFileName);
"@ -Namespace "MyWin32" -Name "LoadCursor"
function GenerateForm {
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$btn = New-Object System.Windows.Forms.Button
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
$handler_button1_Click=
{
$form1.Cursor = [MyWin32.LoadCursor]::LoadCursorFromFile('C:\Windows\Cursors\aero_busy.ani')
}
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 95
$System_Drawing_Size.Width = 180
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"
$form1.Text = "Cursor"
$btn.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$btn.Location = $System_Drawing_Point
$btn.Name = "btn"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 71
$System_Drawing_Size.Width = 156
$btn.Size = $System_Drawing_Size
$btn.TabIndex = 0
$btn.Text = "Maus-Cursor animieren"
$btn.UseVisualStyleBackColor = $True
$btn.add_Click($handler_button1_Click)
$form1.Controls.Add($btn)
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function
GenerateForm
Ach so, na dann nehm doch einfach ein GIF das du in einer PictureBox platzierst, das ANI kannst du ja von mir aus in ein GIF umwandeln.
Happy Weekend
Gruß jodel
function GenerateForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
$form1 = New-Object System.Windows.Forms.Form
$pictureBox1 = New-Object System.Windows.Forms.PictureBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 272
$System_Drawing_Size.Width = 292
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$form1.Name = "form1"
$form1.Text = "Animated Gif"
$pictureBox1.Anchor = 15
$pictureBox1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$pictureBox1.Location = $System_Drawing_Point
$pictureBox1.Name = "pictureBox1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 248
$System_Drawing_Size.Width = 268
$pictureBox1.Size = $System_Drawing_Size
$pictureBox1.SizeMode = 4
$pictureBox1.TabIndex = 0
$pictureBox1.TabStop = $False
$pictureBox1.ImageLocation = 'http://www.kizoa.com/img/e8nZC.gif'
$form1.Controls.Add($pictureBox1)
#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null
} #End Function
GenerateForm
Happy Weekend
Gruß jodel