Files
IO-Konvertierer/Test-Skripte/GUI-Angepasst3.ps1
T
2023-06-13 15:37:11 +02:00

264 lines
6.9 KiB
PowerShell

# Änderungsziel vs. 2: Return in Main realisieren durch einbau von EventHandler
# Ist nicht auf Stand von 2!!!!! 2 Aktuell besser!
# https://techwizard.cloud/2014/03/11/powershell-custom-gui-input-box-for-passing-values-to-variables/
# Todo: Alles
Function Main
{
#Ändern. Laufwerke sollten möglichst in der GUI initialisert werden
$Laufwerke = LaufwerkeFinden
[System.String]$Pfad = Gui $Laufwerke
Write-Host "Dateityp nach Übergabe: " $Pfad.GetType()
Write-Host "Datei ausgewählt mit dem Verzeichnis " $Pfad
}
Function Gui ($Laufwerke)
{
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
# Eigenschaften Fenster
$Fenster = New-Object System.Windows.Forms.Form
$Fenster.Text = "Laufwerke"
$Fenster.Size = New-Object System.Drawing.Size(900,600) #Breite, Höhe
$Fenster.StartPosition = "CenterScreen"
$Fenster.KeyPreview = $true # was macht das?
$Fenster.MaximumSize = $Fenster.Size # legt fest, dass Größe des Fensters nicht verändert werden kann
$Fenster.MinimumSize = $Fenster.Size
# PfadFeld
$PfadFeld = New-Object System.Windows.Forms.TextBox
$PfadFeld.Location = New-Object System.Drawing.Size(10,10)
$PfadFeld.Size = New-Object System.Drawing.Size(860,20)
#$PfadFeld.Text = $Pfad #Bringt nur etwas, wenn $Pfad einen Anfangswert hat, da der Text nicht laufend aktualisiert wird
$Fenster.Controls.Add($PfadFeld)
# ListeOrdnernamen
$ListeOrdnernamen = New-Object System.Windows.Forms.ListBox
$ListeOrdnernamen.Location = New-Object System.Drawing.Size(10,40)
$ListeOrdnernamen.Size = New-Object System.Drawing.Size(860,20)
$ListeOrdnernamen.Height = 450
foreach ($Laufwerk in $Laufwerke)
{
$ListeOrdnernamen.Items.Add($Laufwerk)
}
<#for ($i = 0; $i -lt 100; $i++)
{
$ListeOrdnernamen.Items.Add("Wert$i")
}#>
$Fenster.Controls.Add($ListeOrdnernamen)
<#
# Beispiel Textfeld
$Textfeld1 = New-Object System.Windows.Forms.Label
$Textfeld1.Location = New-Object System.Drawing.Size(7,500)
$Textfeld1.Size = New-Object System.Drawing.Size(130,15)
$Textfeld1.Text = "Beispiel Text"
$Fenster.Controls.Add($Textfeld1)
#>
# AuswählenButton
$AuswählenButton = New-Object System.Windows.Forms.Button
$AuswählenButton.Location = New-Object System.Drawing.Size(750,500)
$AuswählenButton.Size = New-Object System.Drawing.Size(100,30)
$AuswählenButton.Text = "Auswählen"
$AuswählenButton.Add_MouseClick({
# Aktion bei Klick
# Variablen bestimmen zur Übergabe
$Auswahl = $ListeOrdnernamen.SelectedItem
$Pfad = $PfadFeld.Text
Write-Host "Gewählter Ordner/ Datei: " $Auswahl
Write-Host "Vorheriger Pfad: " $Pfad
# Pfad aktualisieren
VerzeichnisAktualisieren $Pfad $Auswahl
})
$Fenster.Controls.Add($AuswählenButton)
# ZurückButton
$ZurückButton = New-Object System.Windows.Forms.Button
$ZurückButton.Location = New-Object System.Drawing.Size(10,500)
$ZurückButton.Size = New-Object System.Drawing.Size(100,30)
$ZurückButton.Text = "Zurück"
$ZurückButton.Add_MouseClick({
Write-Host "Pfad ausgabe: " $PfadFeld.Text
$Pfad = $PfadFeld.Text
if ($Pfad.Length -gt 3)
{
# Weiter mit Ordnern/Dateien
Write-Host "Ordner/ Dateien anzeigen"
$Pfad = Split-Path $Pfad
Write-Host "Neuer Pfad: " $Pfad
$PfadFeld.Text = $Pfad
$Fenster.Text = $(Split-Path $Pfad)
$ListeOrdnernamen.Items.Clear()
Write-Host "Pfadwert vor Übergabe: " $Pfad
$Optionen = Optionen $Pfad
foreach ($Option in $Optionen)
{
# Write-Host "Option: " $Option
if ($Option.length -gt 0)
{
$ListeOrdnernamen.Items.Add($Option)
}
}
}
elseif ($Pfad.Length -le 3)
{
# Weiter mit Laufwerken
Write-Host "Laufwerke anzeigen"
$Pfad = Split-Path $Pfad
Write-Host "Neuer Pfad: " $Pfad
$PfadFeld.Text = $Pfad
$Fenster.Text = "Laufwerke"
$ListeOrdnernamen.Items.Clear()
Write-Host "Pfadwert vor Übergabe: " $Pfad
$Laufwerke = LaufwerkeFinden $Pfad
foreach ($Laufwerk in $Laufwerke)
{
# Write-Host "Option: " $Option
if ($Laufwerk.length -gt 0)
{
$ListeOrdnernamen.Items.Add($Laufwerk)
}
}
}
else
{
# Fehler/ Nichts tun?
}
})
$Fenster.Controls.Add($ZurückButton)
$Fenster.Add_Shown({$Fenster.Activate()})
[void]$Fenster.ShowDialog()
$eventHandler = [System.EventHandler]{
$PfadFeld.Text
$ListeOrdnernamen.SelectedItem
$Fenster.Close()
}
# TestButton
$TestButton = New-Object System.Windows.Forms.Button
$TestButton.Location = New-Object System.Drawing.Size(355,500)
$TestButton.Size = New-Object System.Drawing.Size(100,30)
$TestButton.Text = "Test"
$TestButton.Add_Click($eventHandler)
$Fenster.Controls.Add($TestButton)
Write-Host "Ausgabe vor Ende Gui-Funktion, Pfad: " $Pfad
return $Pfad
}
Function VerzeichnisAktualisieren ($Pfad, $Auswahl)
{
if ($Pfad.length -gt 0)
{
$Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
}
else
{
$Pfad = $Auswahl
}
#Erkennen, ob *.txt-Datei gewählt wurde -> ggf. Auswahl abgeschlossen
if ($($Auswahl -match ".txt"))
{
Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad
Write-Host "Dateityp: " $Pfad.GetType()
$Fenster.Dispose()
#NachAuswahl $Pfad
return $Pfad
}
# Werte in Form aktualisieren
$PfadFeld.Text = $Pfad
$Fenster.Text = $Auswahl
$ListeOrdnernamen.Items.Clear()
$Optionen = Optionen $Pfad
Write-Host "Mögliche Optionen: " $Optionen
foreach ($Option in $Optionen)
{
# Write-Host "Option: " $Option
if ($Option.length -gt 0)
{
$ListeOrdnernamen.Items.Add($Option)
}
}
Write-Host "Neuer Pfad: " $Pfad
return
}
Function NachAuswahl ($Pfad)
{
Write-Host "Auswahl abgeschlossen, ab jetzt .txt-Datei bearbeiten"
Write-Host "Name in Funktion: " $Pfad
Exit
}
Function UnterOrdnerFinden($Pfad)
{
#abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung
$Ordner = $(Get-Childitem $Pfad -Directory)
return $Ordner
}
Function LaufwerkeFinden()
{
$Laufwerke = $(Get-PSDrive | where {$_.Free}).Name
$i = 0
foreach($Laufwerk in $Laufwerke)
{
$Laufwerke[$i] = $Laufwerk + ":\"
$i++
}
return $Laufwerke
}
Function TxtDateienFinden($Pfad)
{
$TxtDateien = $(Get-Childitem $Pfad\*.txt)
if ($TxtDateien.Length -gt 0)
{
return $(Split-Path $TxtDateien -Leaf)
}
else
{
return
}
}
Function Optionen($Pfad)
{
# Unterordner und .txt-Dateien finden
$UnterOrdner = UnterOrdnerFinden $Pfad
$TxtDateien = TxtDateienFinden $Pfad
#Write-Host "Gefundenen Unterordner: " $Unterorder
#Write-Host "Gefundenen TxtDateien: " $TxtDateien
#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück
$Optionen = $UnterOrdner + $TxtDateien
#Write-Host "Optionen vor Übergabe: " $Optionen
return $Optionen
}
Main