Beschreibung
Da ich ein Fan der Konsole bin und gerne mehr mit Powershell erledigen möchte , habe ich mich auf die Suche gemacht, komfortable Werte abzufragen in Form eines Formulars. Klar ich kann mit Tools mit eine GUI zusammenbasteln und auf die Ereignisse reagieren. Aber dann befinde ich mich schon wieder außerhalb der Konsole. Also was tun.
Ich habe also angefangen ein Formulartool für die Shell zu erstellen. Was bis dato auch schon super funktioniert. Aber da ich auch Auswahlfelder haben möchte, bin auf das Problem gestoßen, da ich beim Einblenden der möglichen Werte, andere Feldbreiche überschreibe. Also muss ich vor dem Einblenden den Bereich, in dem ich die Werte einlebenden möchte, zwischenspeichern. Dazu habe ich die Funktion GetBackGround geschrieben die mit der Funktion GetBufferContents einen Bereich sichert.
Ich gebe als Parameter die linke obere und die rechte untere Ecke als Koordinaten an. Dann sichert mir die Funktion den Inhalt und gibt sie mir zurück.
Ich fühle mich, irgendwie wie in alte DOS Zeiten versetzt. Die ersten Programmier Erfahrungen mit Fenstertechnik unter Turbo Basic und Dos.
Mit der Funktion SetBackGround wird der gesicherte Inhalt einfach wieder an der Ursprungsposition ausgegeben. Weitere Funktionen rund um mein Powershell Formulartool für die Shell werde ich zu einem späteren Zeitpunkt hier veröffentlichen.
Parameter
Parameter Name | Parameter Wert |
---|---|
intLeft | Spalte der linken oberen Ecke (beginnt mit 0) |
intTop | Zeile der linken oberen Ecke (beginnt mit 0) |
intRight | Spalte der rechten unteren Ecke |
intBottom | Zeile der rechten unteren Ecke |
Rückgabe
Rückgabe Typ | Rückgabe Wert |
---|---|
Array | [0] = CursorPosition der linken oberen Ecke [1] = Array der Daten die gesichert wurden inkl. Farbwerten |
Beispiel
Clear-Host $objScreen = GetBackGround -intLeft 0 -intTop 0 -intRight 80 -intBottom 20 dir c:\ Write-Host "Press any key to continue ..." $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") SetBackGround -objData $objScreen
Code GetBackGround
function GetBackGround () { param ([int]$intLeft = 0, [int]$intTop = 0, [int]$intRight = 0, [int]$intBottom = 0) $Host.ui.RawUI.CursorPosition = @{x=$intLeft; y=$intTop} $objPosition = $Host.ui.RawUI.CursorPosition $objRect = New-Object Management.Automation.Host.Rectangle $objRect.Left = $intLeft $objRect.Top = $intTop $objRect.Right = $intRight $objRect.Bottom = $intBottom $objCells = $host.UI.RawUI.GetBufferContents($objRect) return $objPosition, $objCells }
Code SetBackGround
function SetBackGround(){ param ($objData) $host.UI.RawUI.SetBufferContents($objData[0], $objData[1]) }