Powershell GUI immer im Vordergrund
Aloa in die Runde,
Ziel der Übung war es das Fenster immer im Vordergrund zu halten.
Wenn ich mich nicht ganz irre sollte das doch durch das "$Form.TopMost=$true" erledigt werden oder?
Schipsel zum drüberlesen:
VG
Ziel der Übung war es das Fenster immer im Vordergrund zu halten.
Wenn ich mich nicht ganz irre sollte das doch durch das "$Form.TopMost=$true" erledigt werden oder?
Schipsel zum drüberlesen:
[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')|Out-Null
[System.Reflection.Assembly]::LoadWithPartialName('System.Drawing')|Out-Null
[Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')|Out-Null
[System.Windows.Forms.Application]::EnableVisualStyles()|Out-Null
$Form = New-Object System.Windows.Forms.Form
$richTextBox1 = New-Object System.Windows.Forms.RichTextBox
$form_KeyDown=[System.Windows.Forms.KeyEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.KeyEventArgs]
if ($_.Alt -eq $true -and $_.KeyCode -eq 'F4') {
$script:altF4Pressed = $true;
}
}
$form_FormClosing=[System.Windows.Forms.FormClosingEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.FormClosingEventArgs]
if ($script:altF4Pressed)
{
$_.Cancel = $true
$script:altF4Pressed = $false;
}
}
$form.KeyPreview = $True
$form.add_KeyDown($form_KeyDown)
$form.add_FormClosing($form_FormClosing)
$pathFinal=($env:SystemDrive)+'\Temp\Meldung.rtf'
$form.FormBorderStyle = 'FixedSingle'
$Form.Text='Installation'
$Form.maximumsize=New-Object System.Drawing.Size(780,380)
$Form.minimumsize=New-Object System.Drawing.Size(780,380)
$Form.startposition='centerscreen'
$Form.ControlBox=$false
$Form.MinimizeBox=$false
$Form.MaximizeBox = $false
$Form.TopMost=$true
$Form.ShowInTaskbar=$false
$richTextBox1.Size=new-object System.Drawing.Size(710,250)
$richTextBox1.Location=new-object System.Drawing.Size(35,25)
$richTextBox1.Rtf=[System.IO.FILE]::ReadAllText($pathFinal)
$richTextBox1.ForeColor='Black' ;$richTextBox1.BorderStyle='none'
$richTextBox1.Enabled=$false;$Form.Controls.Add($richTextBox1)
$progressBar1=New-Object System.Windows.Forms.ProgressBar
$progressBar1.Name='progressBar1';$progressBar1.Style='Marquee'
$progressBar1.Left=35
$progressBar1.Top=300
$progressBar1.Width=710
$form.Controls.Add($progressBar1)
$form.Focus()|out-null
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 398286
Url: https://administrator.de/contentid/398286
Ausgedruckt am: 25.11.2024 um 07:11 Uhr
8 Kommentare
Neuester Kommentar
Schipsel zum drüberlesen:
Und?? Dann mach doch.
Lesen dann weist du warum:
https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.form.to ...
WS_EX_TOPMOST ist dein Freund:
https://docs.microsoft.com/de-de/windows/desktop/winmsg/extended-window- ...
https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.form.to ...
WS_EX_TOPMOST ist dein Freund:
https://docs.microsoft.com/de-de/windows/desktop/winmsg/extended-window- ...
Hier dein Wrapper zum Topmost machen der rest sollte klar sein wenn man die Parameter im Link liest
Sollst ja auch noch was von lernen
$global:tools = Add-Type –MemberDefinition '
[DllImport("user32.dll")] public static extern bool SetWindowPos(IntPtr hWnd,IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
' -name "windowtools" -namespace W32 –passThru -EA SilentlyContinue
Zitat von @H41mSh1C0R:
Also um auf die Ursprungsfrage zurück zu kommen, das geht von Hause aus nicht und es muss die Funktion SetWindowPos direkt angesprochen werden?
Besser ist das, denn jede andere Anwendung kann für sich aus auch das Flag setzen um sich damit TOPMOST zu machen.Also um auf die Ursprungsfrage zurück zu kommen, das geht von Hause aus nicht und es muss die Funktion SetWindowPos direkt angesprochen werden?
Wenn die Parent-Anwendung nicht der Desktop ist ist das Fenster nur von diesem Prozess Topmost und nicht vom Desktop.