Cursor Focus mal da - mal nicht
Hallo,
ich habe ein Powershell Script, welches mir AD-Benutzer anlegt. Die Eingabe von Benutzernamen erfolgt durch eine TextBox, wobei auf dem ersten Eingabefeld (hier Vorname) der Cursor Focus liegt (ist blau markiert).
Jetzt mein Problem.
Startet man das Script innerhalb von PowerShell ISE, ist der Cursor Focus gesetzt.
Öffnet man nur Powershell und navigiert zum Script und starte das Script, ist der der Cursor Focus auch gesetzt.
Starte ich das Script mit einem Doppelklick, startet das Script aber es ist kein Cursor Focus auf dem ersten Eingabefeld.
Woran kann es liegen, dass sich das Script in Abhängigkeit der Startart anders verhält?
Gruß
Peter
ich habe ein Powershell Script, welches mir AD-Benutzer anlegt. Die Eingabe von Benutzernamen erfolgt durch eine TextBox, wobei auf dem ersten Eingabefeld (hier Vorname) der Cursor Focus liegt (ist blau markiert).
Jetzt mein Problem.
Startet man das Script innerhalb von PowerShell ISE, ist der Cursor Focus gesetzt.
Öffnet man nur Powershell und navigiert zum Script und starte das Script, ist der der Cursor Focus auch gesetzt.
Starte ich das Script mit einem Doppelklick, startet das Script aber es ist kein Cursor Focus auf dem ersten Eingabefeld.
Woran kann es liegen, dass sich das Script in Abhängigkeit der Startart anders verhält?
Gruß
Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 355848
Url: https://administrator.de/forum/cursor-focus-mal-da-mal-nicht-355848.html
Ausgedruckt am: 07.04.2025 um 10:04 Uhr
7 Kommentare
Neuester Kommentar

ist der der Cursor Focus auch gesetzt.
Einen Cursor Focus gibt es nicht, ein Feld/Button/Steuerelement kann den Fokus haben oder nicht, kein Cursor!Woran kann es liegen, dass sich das Script in Abhängigkeit der Startart anders verhält?
Es kennt keiner dein Skript!Starte ich das Script mit einem Doppelklick
Wie das? Hast du es als EXE kompiliert, oder die Explorer Dateierweiterungsaktion angepasst damit ein Doppelklick das Skript startet? Wenn ja wie sieht deine Befehlszeile aus?Eine Powershell-Konsole und eine GUI sind zwei paar Schuhe, blende die Powershell-Konsole via WIN32API vorher aus.
Servus Peter,
, lass das weg.
Setze folgendes an den Anfang deines Skripts
Grüße Uwe
Ich kenn nur den Befehl.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden & "PfadScript\Script.ps1"
Das ist dein Problem C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden & "PfadScript\Script.ps1"
Setze folgendes an den Anfang deines Skripts
$showWindowAsync = Add-Type –memberDefinition @"
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@ -name "Win32ShowWindowAsync" -namespace Win32Functions –passThru
[void]$showWindowAsync::ShowWindowAsync((Get-Process –id $pid).MainWindowHandle, 0)

Welches OS?
Hier geht das problemlos. Win10 als auch Win7.
Wie sieht deine Modifikation per Doppelklick aus.
Meinst du vielleicht das das ganze Fenster nicht aktiv ist??
Hier geht das problemlos. Win10 als auch Win7.
Wie sieht deine Modifikation per Doppelklick aus.
Meinst du vielleicht das das ganze Fenster nicht aktiv ist??
Zitat von @134464:
Hier geht das problemlos. Win10 als auch Win7.
Kann ich bestätigenHier geht das problemlos. Win10 als auch Win7.
Meinst du vielleicht das das ganze Fenster nicht aktiv ist??
Wenn das der Fall sein sollte, funkt dir da eine andere Anwendung rein.In dem Fall sollte das hier helfen
$showWindowAsync = Add-Type –memberDefinition @"
[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")] public static extern bool SetForegroundWindow(IntPtr hWnd);
"@ -name "Win32ShowWindowAsync" -namespace Win32Functions –passThru
[void]$showWindowAsync::ShowWindowAsync((Get-Process –id $pid).MainWindowHandle, 0)
#Generated Form Function
function GenerateForm {
#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
#endregion
#region Generated Form Objects
$objForm = New-Object System.Windows.Forms.Form
$label2 = New-Object System.Windows.Forms.Label
$label1 = New-Object System.Windows.Forms.Label
$objNachnameBox = New-Object System.Windows.Forms.TextBox
$objVornameBox = New-Object System.Windows.Forms.TextBox
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects
$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
$objForm.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 85
$System_Drawing_Size.Width = 224
$objForm.ClientSize = $System_Drawing_Size
$objForm.DataBindings.DefaultDataSourceUpdateMode = 0
$objForm.Name = "objForm"
$objForm.Text = "Demo"
$objForm.add_Load({
$objVornameBox.Focus()
$objVornameBox.SelectAll()
})
$objForm.add_Shown({
[void]$showWindowAsync::SetForegroundWindow($objForm.Handle)
$objVornameBox.Focus()
$objVornameBox.SelectAll()
})
$label2.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 3
$System_Drawing_Point.Y = 38
$label2.Location = $System_Drawing_Point
$label2.Name = "label2"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 72
$label2.Size = $System_Drawing_Size
$label2.TabIndex = 3
$label2.Text = "Nachname"
$objForm.Controls.Add($label2)
$label1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 3
$System_Drawing_Point.Y = 15
$label1.Location = $System_Drawing_Point
$label1.Name = "label1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 52
$label1.Size = $System_Drawing_Size
$label1.TabIndex = 2
$label1.Text = "Vorname"
$objForm.Controls.Add($label1)
$objNachnameBox.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 81
$System_Drawing_Point.Y = 38
$objNachnameBox.Location = $System_Drawing_Point
$objNachnameBox.Name = "objNachnameBox"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 100
$objNachnameBox.Size = $System_Drawing_Size
$objNachnameBox.TabIndex = 1
$objForm.Controls.Add($objNachnameBox)
$objVornameBox.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 81
$System_Drawing_Point.Y = 12
$objVornameBox.Location = $System_Drawing_Point
$objVornameBox.Name = "objVornameBox"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 100
$objVornameBox.Size = $System_Drawing_Size
$objVornameBox.TabIndex = 0
$objVornameBox.Text = "Max"
$objForm.Controls.Add($objVornameBox)
#endregion Generated Form Code
#Save the initial state of the form
$InitialFormWindowState = $objForm.WindowState
#Init the OnLoad event to correct the initial state of the form
$objForm.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$objForm.ShowDialog()| Out-Null
} #End Function
#Call the Function
GenerateForm