PowerShell GUI: TextBox Input vorgeben (formatieren)
Hallo zusammen,
ich entwickle gerade ein PS-Script für Windows 10 Client Installationen.
In diesem GUI Script sind TextBoxen enthalten die für die Windows und Office Aktivierung vorgesehen sind. Sprich, in diese TextBoxen will ich stumpf den entsprechenden Key eingeben.
Nun zu meiner Frage:
Kann ich die TextBoxen so konfigurieren, dass
- alle Buchstaben automatisch groß geschrieben werden
- zahlen bleiben zahlen (keine Sonderzeichen)
- Nach jedem 5 Zeichen ein "-" eingefügt wird
Ziel ist es also, dass die TextBox sich genau so verhält wie das Eingabefeld für die Windows Aktivierung in den Systemeinstellungen.
Ich habe im World Wide Web nichts genaues dazu finden können....ist mein Vorhaben vielleicht gar nicht möglich ?
Stand jetzt habe ich nur eine "nackte" TextBox:
Im voraus bereits vielen Dank für eure Mühen!
ich entwickle gerade ein PS-Script für Windows 10 Client Installationen.
In diesem GUI Script sind TextBoxen enthalten die für die Windows und Office Aktivierung vorgesehen sind. Sprich, in diese TextBoxen will ich stumpf den entsprechenden Key eingeben.
Nun zu meiner Frage:
Kann ich die TextBoxen so konfigurieren, dass
- alle Buchstaben automatisch groß geschrieben werden
- zahlen bleiben zahlen (keine Sonderzeichen)
- Nach jedem 5 Zeichen ein "-" eingefügt wird
Ziel ist es also, dass die TextBox sich genau so verhält wie das Eingabefeld für die Windows Aktivierung in den Systemeinstellungen.
Ich habe im World Wide Web nichts genaues dazu finden können....ist mein Vorhaben vielleicht gar nicht möglich ?
Stand jetzt habe ich nur eine "nackte" TextBox:
# TextBox WinKey
$WINKeyBox = New-Object System.Windows.Forms.TextBox
$WINKeyBox.width = 325
$WINKeyBox.height = 20
$WINKeyBox.location = New-Object System.Drawing.Point(15,200)
$WINKeyBox.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
Im voraus bereits vielen Dank für eure Mühen!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1366662580
Url: https://administrator.de/contentid/1366662580
Ausgedruckt am: 08.11.2024 um 13:11 Uhr
3 Kommentare
Neuester Kommentar
Zitat von @SYNTAX1001:
ich entwickle gerade ein PS-Script für Windows 10 Client Installationen.
In diesem GUI Script sind TextBoxen enthalten die für die Windows und Office Aktivierung vorgesehen sind. Sprich, in diese TextBoxen will ich stumpf den entsprechenden Key eingeben.
Nun zu meiner Frage:
Kann ich die TextBoxen so konfigurieren, dass
- alle Buchstaben automatisch groß geschrieben werden
- zahlen bleiben zahlen (keine Sonderzeichen)
- Nach jedem 5 Zeichen ein "-" eingefügt wird
Ziel ist es also, dass die TextBox sich genau so verhält wie das Eingabefeld für die Windows Aktivierung in den Systemeinstellungen.
Ich habe im World Wide Web nichts genaues dazu finden können....ist mein Vorhaben vielleicht gar nicht möglich
In diesem GUI Script sind TextBoxen enthalten die für die Windows und Office Aktivierung vorgesehen sind. Sprich, in diese TextBoxen will ich stumpf den entsprechenden Key eingeben.
Nun zu meiner Frage:
Kann ich die TextBoxen so konfigurieren, dass
- alle Buchstaben automatisch groß geschrieben werden
- zahlen bleiben zahlen (keine Sonderzeichen)
- Nach jedem 5 Zeichen ein "-" eingefügt wird
Ziel ist es also, dass die TextBox sich genau so verhält wie das Eingabefeld für die Windows Aktivierung in den Systemeinstellungen.
Ich habe im World Wide Web nichts genaues dazu finden können....ist mein Vorhaben vielleicht gar nicht möglich
Die Implementierung eines passenden Event Handlers, z. B. für TextChanged, könnte helfen.
Servus @SYNTAX1001,
habe dir mal auf die schnelle zwei Versionen als Windows-Forms zum ausprobieren zusammen gestellt:
Alternativ zur manuellen Methode oben kannst du auch zum MaskedTextBox Control greifen, das bietet schon diverse Funktionen zur Validierung und Anpassung der Nutzereingabe mit Masken und reduziert den selbst zu treibenden Aufwand.
Grüße Uwe
habe dir mal auf die schnelle zwei Versionen als Windows-Forms zum ausprobieren zusammen gestellt:
Variante 1 mit herkömmlicher Textbox
function GenerateForm {
Add-Type -A System.Windows.Forms
# error provider object
$ep = New-Object System.Windows.Forms.ErrorProvider
# form object
$form1 = New-Object System.Windows.Forms.Form -P @{
ClientSize = '320,80'
Text = "Key-Input"
}
# text input
$txt = New-Object System.Windows.Forms.TextBox -P @{
Name = 'txt1'
Location = '10,10'
Size = '290,20'
Anchor = 'Top,Left,Right'
MaxLength = 29
TextAlign = 'Center'
Font = New-Object System.Drawing.Font('Microsoft Sans Serif',9)
# subscribe KeyDown Event
add_KeyDown = {
# handle pasting key via CTRL-V
if ($_.Control -and $_.KeyCode -eq [System.Windows.Forms.Keys]::V){
# clear errors
$ep.Clear()
$clip = Get-Clipboard -Format Text
if ($clip -match '(([2-46-9a-df-hj-km-np-rt-y]){5}-){4}([2-46-9a-df-hj-km-np-rt-y]){5}'){
$txt.Text = $matches
}
$txt.SelectionStart = $txt.Text.Length
}
}
# subscribe KeyPress event
add_KeyPress = {
# clear errors
$ep.Clear()
# please note letters E, U, L, A, O, S, I, Z, AND numbers 1, 0, 5 are never used in the product key combination.
if ($_.KeyChar -match '[2-46-9a-df-hj-km-np-rt-y]'){
$_.Handled = $false
# convert to upper case
$_.KeyChar = $_.KeyChar.toString().toUpper()
# add dash after every five characters
if ($txt.Text.Length -in (5,11,17,23)){
$txt.Text += "-"
$txt.SelectionStart = $txt.Text.Length
}
# handle backspace key
}elseif($_.KeyChar -eq [System.Windows.Forms.Keys]::Back){
$_.Handled = $false
# jump over dash on backspace
if ($txt.Text.EndsWith('-')){
$txt.Text = $txt.Text.Substring(0,$txt.Text.Length-1)
$txt.SelectionStart = $txt.Text.Length
}
# invalid char entered ignore input
}else{
$_.Handled = $true
}
}
add_Click = {
$txt.SelectionStart = $txt.Text.Length
}
add_DoubleClick = {
$txt.SelectionStart = $txt.Text.Length
}
}
# add button
$btn = New-Object System.Windows.Forms.Button -P @{
Text = "OK"
Location = '10,40'
Size = '300,30'
Anchor = 'Bottom,Left,Right'
add_Click = {
# check general format of key
if ($txt.Text -match '^(([2-46-9a-df-hj-km-np-rt-y]){5}-){4}([2-46-9a-df-hj-km-np-rt-y]){5}$'){
$form1.Close()
}else{
$ep.SetError($txt,'The key should be in this format XXXXX-XXXXX-XXXXX-XXXXX-XXXXX !')
}
}
}
$form1.Controls.AddRange(@($txt,$btn))
[void]$form1.ShowDialog()
$txt.Text
}
GenerateForm
Variante 2 mit MaskedTextbox Control:
Alternativ zur manuellen Methode oben kannst du auch zum MaskedTextBox Control greifen, das bietet schon diverse Funktionen zur Validierung und Anpassung der Nutzereingabe mit Masken und reduziert den selbst zu treibenden Aufwand.
function GenerateForm {
Add-Type -A System.Windows.Forms
# error provider object
$ep = New-Object System.Windows.Forms.ErrorProvider
# form object
$form1 = New-Object System.Windows.Forms.Form -P @{
ClientSize = '320,80'
Text = "Key-Input"
}
# text input with masked textbox
$txt = New-Object System.Windows.Forms.MaskedTextBox -P @{
Name = 'txt1'
Location = '10,10'
Size = '290,20'
Anchor = 'Top,Left,Right'
AsciiOnly = $true
# set mask: set to uppercase and onyl use ASCII Letters and Numbers with dashes
Mask = '>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA'
Font = New-Object System.Drawing.Font('Microsoft Sans Serif',9)
add_TextChanged ={
$ep.Clear()
}
}
# add button
$btn = New-Object System.Windows.Forms.Button -P @{
Text = "OK"
Location = '10,40'
Size = '300,30'
Anchor = 'Bottom,Left,Right'
add_Click = {
# check if mask is completed
if (!$txt.MaskFull){
$ep.SetError($txt,'The key is not complete!')
return
}
# check general format of key
if ($txt.Text -match '^(([2-46-9a-df-hj-km-np-rt-y]){5}-){4}([2-46-9a-df-hj-km-np-rt-y]){5}$'){
$form1.Close()
}else{
$ep.SetError($txt,'The key should be in this format: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX (letters E, U, L, A, O, S, I, Z, AND numbers 1, 0, 5 should never be used) !')
}
}
}
$form1.Controls.AddRange(@($txt,$btn))
[void]$form1.ShowDialog()
$txt.Text
}
GenerateForm
Grüße Uwe