Unterordner dazu
This commit is contained in:
@@ -0,0 +1,387 @@
|
||||
# Änderungsziel vs. 1: Funktion bei Klick auf "Auswählen" und "Zurück" auslagern
|
||||
# Todo: "Zurück" auslagern
|
||||
|
||||
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 "Dateirückgabe in Main: " $Pfad
|
||||
}
|
||||
|
||||
|
||||
Function Gui ($Laufwerke)
|
||||
{
|
||||
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
|
||||
[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
|
||||
$PfadFeld.Add_KeyDown({
|
||||
# Reaktion bei gedrückter Taste
|
||||
$Taste = $_.KeyCode
|
||||
TastenReaktionPfadFeld $Taste
|
||||
})
|
||||
$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)
|
||||
}
|
||||
$ListeOrdnernamen.Add_DoubleClick({
|
||||
# Variablen bestimmen zur Übergabe
|
||||
$Auswahl = $ListeOrdnernamen.SelectedItem
|
||||
$Pfad = $PfadFeld.Text
|
||||
Write-Host "Gewählter Ordner/ Datei: " $Auswahl
|
||||
Write-Host "Vorheriger Pfad: " $Pfad
|
||||
|
||||
# Pfad aktualisieren
|
||||
VerzeichnisAuswaehlen $Pfad $Auswahl
|
||||
})
|
||||
$ListeOrdnernamen.Add_KeyDown({
|
||||
# Reaktion bei gedrückter Taste
|
||||
$Taste = $_.KeyCode
|
||||
TastenReaktionListeOrdnernamen $Taste
|
||||
})
|
||||
$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)
|
||||
#>
|
||||
|
||||
# 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_Click({
|
||||
Write-Host "Pfad ausgabe: " $PfadFeld.Text
|
||||
$Pfad = $PfadFeld.Text
|
||||
|
||||
#Pfad aktualisieren
|
||||
VerzeichnisZurueck $Pfad
|
||||
})
|
||||
$ZurückButton.Add_KeyDown({
|
||||
# Reaktion bei gedrückter Taste
|
||||
$Taste = $_.KeyCode
|
||||
TastenReaktionButtons $Taste
|
||||
})
|
||||
$Fenster.Controls.Add($ZurückButton)
|
||||
|
||||
# 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_Click({
|
||||
# Variablen bestimmen zur Übergabe
|
||||
$Auswahl = $ListeOrdnernamen.SelectedItem
|
||||
# Falls nicht aktiv ein Eintrag gewählt wurde, in den obersten navigieren
|
||||
if ($($Auswahl.length -eq 0))
|
||||
{
|
||||
$Auswahl = $ListeOrdnernamen.Items[0]
|
||||
}
|
||||
$Pfad = $PfadFeld.Text
|
||||
Write-Host "Gewählter Ordner/ Datei: " $Auswahl
|
||||
Write-Host "Vorheriger Pfad: " $Pfad
|
||||
|
||||
# Pfad aktualisieren
|
||||
VerzeichnisAuswaehlen $Pfad $Auswahl
|
||||
})
|
||||
$AuswählenButton.Add_KeyDown({
|
||||
# Reaktion bei gedrückter Taste
|
||||
$Taste = $_.KeyCode
|
||||
TastenReaktionButtons $Taste
|
||||
})
|
||||
$Fenster.Controls.Add($AuswählenButton)
|
||||
|
||||
$Fenster.Add_Shown({$Fenster.Activate()})
|
||||
[void]$Fenster.ShowDialog()
|
||||
}
|
||||
|
||||
#--------------------------------------------------------- E N D E G U I ----------------------------------------------------------------------
|
||||
|
||||
Function VerzeichnisAuswaehlen ($Pfad, $Auswahl)
|
||||
{
|
||||
if ($Pfad.length -gt 0)
|
||||
{
|
||||
$Pfad = Join-Path -Path $Pfad -ChildPath $Auswahl -Resolve
|
||||
}
|
||||
else
|
||||
{
|
||||
$Pfad = $Auswahl
|
||||
}
|
||||
|
||||
#Falls nicht aktiv ein Eintrag ausgewählt wurde, den obersten wählen
|
||||
if ($Auswahl.length -eq 0)
|
||||
{
|
||||
$Auswahl = $ListeOrdnernamen.Items[0]
|
||||
}
|
||||
|
||||
# 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
|
||||
}
|
||||
|
||||
AnzeigeAktualisieren $Pfad
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Function NachAuswahl ($Pfad)
|
||||
{
|
||||
Write-Host "Auswahl abgeschlossen, ab jetzt .txt-Datei bearbeiten"
|
||||
Write-Host "Name in Funktion: " $Pfad
|
||||
|
||||
#Exit # Wirft Fehler, sollte man sich aber sparen können
|
||||
}
|
||||
|
||||
# Bekommt Pfad, stellt fest ob Laufwerke oder Ordner angezeigt werden müssen und aktualisiert entsprechend alles
|
||||
# Für Laufwerke muss $Pfad = "" sein
|
||||
Function AnzeigeAktualisieren ($Pfad)
|
||||
{
|
||||
Write-Host "Übergebener Pfad: " $Pfad
|
||||
# Feststellen, ob Ordner oder Laufwerke angezeigt werden müssen
|
||||
if ($Pfad.Length -ne "")
|
||||
{
|
||||
# Es handelt sich um Ordner
|
||||
$Optionen = Optionen $Pfad
|
||||
$Fenster.Text = $(Split-Path $Pfad -Leaf)
|
||||
}
|
||||
elseif ($Pfad.Length -eq "")
|
||||
{
|
||||
# Es handelt sich um Laufwerke
|
||||
$Optionen = LaufwerkeFinden
|
||||
$Pfad = ""
|
||||
$Fenster.Text = "Laufwerke"
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Fehler bei Anzeige aktualisieren"
|
||||
# Fehler(?)
|
||||
}
|
||||
$PfadFeld.Text = $Pfad
|
||||
$ListeOrdnernamen.Items.Clear()
|
||||
foreach ($Option in $Optionen)
|
||||
{
|
||||
if ($Option.Length -gt 0)
|
||||
{
|
||||
$ListeOrdnernamen.Items.Add($Option)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Function VerzeichnisZurueck ($Pfad)
|
||||
{
|
||||
if ($Pfad.Length -gt 3)
|
||||
{
|
||||
# Weiter mit Ordnern
|
||||
Write-Host "Ordner anzeigen"
|
||||
$Pfad = Split-Path $Pfad
|
||||
}
|
||||
elseif ($Pfad.Length -le 3)
|
||||
{
|
||||
# Weiter mit Laufwerken
|
||||
Write-Host "Laufwerke anzeigen"
|
||||
$Pfad = ""
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Fehler bei Verzeichnis zurück"
|
||||
# Fehler/ Nichts tun?
|
||||
# Ermitteln: wann tritt dieser Fall ein?
|
||||
}
|
||||
AnzeigeAktualisieren $Pfad
|
||||
return
|
||||
}
|
||||
|
||||
Function PfadExistiert ($Pfad)
|
||||
{
|
||||
if ($(Test-Path $Pfad -PathType Container) -or $(Test-Path $Pfad -Include "*.txt"))
|
||||
{
|
||||
Write-Host "Bei dem Verzeichnis handelt es sich um eine *.txt-Datei oder ein gültiges Verzeichnis"
|
||||
return $true
|
||||
}
|
||||
else
|
||||
{
|
||||
Write-Host "Das Verzeichnis existiert nicht oder es wurde keine *.txt-Datei gewählt"
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
Function TastenReaktionPfadFeld($Taste)
|
||||
{
|
||||
# Write-Host "Übergebene Taste: " $Taste
|
||||
switch ($Taste){
|
||||
"Return" {
|
||||
# Write-Host "Enter gedrückt"
|
||||
$Pfad = $PfadFeld.Text
|
||||
# Write-Host "Pfad: " $Pfad
|
||||
|
||||
if ($Pfad -eq "")
|
||||
{
|
||||
# Laufwerke aktualisieren
|
||||
AnzeigeAktualisieren $Pfad
|
||||
}
|
||||
elseif (PfadExistiert $Pfad)
|
||||
{
|
||||
$PfadEnde = $(Split-Path $Pfad -Leaf)
|
||||
# Write-Host "Pfadende: " $PfadEnde
|
||||
if ($($PfadEnde -match ".txt"))
|
||||
{
|
||||
Write-Host ".txt-Datei ausgewählt, Pfad: " $Pfad
|
||||
Write-Host "Dateityp: " $Pfad.GetType()
|
||||
$Fenster.Dispose()
|
||||
NachAuswahl $Pfad
|
||||
#return $Pfad
|
||||
}
|
||||
else
|
||||
{
|
||||
AnzeigeAktualisieren $Pfad
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AnzeigeAktualisieren ""
|
||||
}
|
||||
}
|
||||
default {
|
||||
# Write-Host "Gedrückte Taste: " $Taste
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Function TastenReaktionListeOrdnernamen($Taste)
|
||||
{
|
||||
# Write-Host "Übergebene Taste: " $Taste
|
||||
switch ($Taste){
|
||||
"Return" {
|
||||
# Write-Host "Enter gedrückt"
|
||||
$Auswahl = $ListeOrdnernamen.SelectedItem
|
||||
if ($($Auswahl.Length -eq 0))
|
||||
{
|
||||
$Auswahl = $ListeOrdnernamen.Items[0]
|
||||
}
|
||||
$Pfad = $PfadFeld.Text
|
||||
# Write-Host "Auswahl: " $Auswahl
|
||||
# Write-Host "Pfad: " $Pfad
|
||||
|
||||
VerzeichnisAuswaehlen $Pfad $Auswahl
|
||||
}
|
||||
"Back" {
|
||||
# Write-Host "Back gedrückt"
|
||||
$Pfad = $PfadFeld.Text
|
||||
# Write-Host "Pfad: " $Pfad
|
||||
|
||||
# Pfad aktualisieren
|
||||
VerzeichnisZurueck $Pfad
|
||||
}
|
||||
default {
|
||||
# Write-Host "Gedrückte Taste: " $Taste
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Function TastenReaktionButtons($Taste)
|
||||
{
|
||||
# Write-Host "Übergebene Taste: " $Taste
|
||||
switch ($Taste){
|
||||
"Back" {
|
||||
# Write-Host "Back gedrückt"
|
||||
$Pfad = $PfadFeld.Text
|
||||
# Write-Host "Pfad: " $Pfad
|
||||
|
||||
# Pfad aktualisieren
|
||||
VerzeichnisZurueck $Pfad
|
||||
}
|
||||
default {
|
||||
# Write-Host "Gedrückte Taste: " $Taste
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
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 UnterOrdnerFinden($Pfad)
|
||||
{
|
||||
#abfangen: keine Ordner vorhanden -> nicht nötig, da keine weitere Verarbeitung
|
||||
$Ordner = $(Get-Childitem $Pfad -Directory)
|
||||
return $Ordner
|
||||
}
|
||||
|
||||
Function Optionen($Pfad)
|
||||
{
|
||||
# Unterordner und .txt-Dateien finden
|
||||
# Typzuweisung nötig, da aus unbekanntem Grund sonst Unterordner eines Ordners, der mit "_" beginnt, nicht gefunden werden können
|
||||
[System.Object[]]$UnterOrdner = UnterOrdnerFinden $Pfad
|
||||
$TxtDateien = TxtDateienFinden $Pfad
|
||||
|
||||
#Gibt aktuell auch Index und Typ (System.IO.DirectoryInfo bzw. System.String) zurück
|
||||
$Optionen = $UnterOrdner + $TxtDateien
|
||||
|
||||
return $Optionen
|
||||
}
|
||||
|
||||
|
||||
Main
|
||||
Reference in New Issue
Block a user