h41msh1c0r
Goto Top

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:

[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

Content-Key: 398286

Url: https://administrator.de/contentid/398286

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: 137846
137846 15.01.2019 aktualisiert um 16:39:24 Uhr
Goto Top
Schipsel zum drüberlesen:
Und?? Dann mach doch.
Mitglied: H41mSh1C0R
H41mSh1C0R 15.01.2019 aktualisiert um 16:40:43 Uhr
Goto Top
Na das TopMost geht bei mir nicht. =) (Frage ist über dem "Schnipsel zum drüberlesen" ^^)
Mitglied: 137846
Lösung 137846 15.01.2019 aktualisiert um 16:44:13 Uhr
Goto Top
Mitglied: H41mSh1C0R
H41mSh1C0R 15.01.2019 aktualisiert um 16:49:39 Uhr
Goto Top
Hmmmmm

mit

$Form.WindowState = 'Maximized'  

klappt es zwar allerdings ignoriert er danach das centerposition. =)
Er schiebt dann das Fenster oben links in die Ecke.

Mit dem WS_EX_TOPMOST bin ich grad etwas überfordert.
Mitglied: 137846
Lösung 137846 15.01.2019 aktualisiert um 16:56:47 Uhr
Goto Top
Zitat von @H41mSh1C0R:
Mit dem WS_EX_TOPMOST bin ich grad etwas überfordert.
Hier dein Wrapper zum Topmost machen der rest sollte klar sein wenn man die Parameter im Link liest
$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  
Sollst ja auch noch was von lernen face-wink
Mitglied: H41mSh1C0R
H41mSh1C0R 15.01.2019 um 17:00:44 Uhr
Goto Top
*=)

Also um auf die Ursprungsfrage zurück zu kommen, das geht von Hause aus nicht und es muss die Funktion SetWindowPos direkt angesprochen werden?

ds

*schulbank drück*
Mitglied: 137846
Lösung 137846 15.01.2019 aktualisiert um 17:13:15 Uhr
Goto Top
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.
Wenn die Parent-Anwendung nicht der Desktop ist ist das Fenster nur von diesem Prozess Topmost und nicht vom Desktop.
Mitglied: H41mSh1C0R
H41mSh1C0R 15.01.2019 um 17:16:09 Uhr
Goto Top
dat lüppt, danke

$Handle = $Form.Handle
$global:tools::SetWindowPos($Handle,-1,100,100,0,0,0x0040)