Как я могу заблокировать форму на рабочем столе? - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь создать форму в PowerShell, которая будет заблокирована на фиксированной позиции на рабочем столе.

Потому что всякий раз, когда я нажимаю кнопку «Показать рабочий стол» в правом нижнем углу на Win 8.1,Форма исчезает, пока я не открою другое окно и не закрою его.

Я просто хочу, чтобы это было там, как будто это виджет, вот часть кода, который я использую:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -Assembly System.Drawing
$Image = [System.Drawing.Image]::Fromfile("Panel.png")
$Form = New-Object system.Windows.Forms.Form
$Form.BackgroundImage = $Image
$Form.BackgroundImageLayout = "None"
$Form.Text = "Reboot Server"
$Form.Width = 517
$Form.Height = 134
$Form.ControlBox = $False
$Form.StartPosition = 'Manual'
$Form.Location = "1390, 300"
$Form.FormBorderStyle = 'None'
$Form.BackColor = "#000000"
$Form.MaximizeBox = $False
$Form.MinimizeBox = $False
$Form.Icon = "icon.ico"
$Form.Image = [System.Drawing.Image]::Fromfile("Panel.png")
$Form.ShowInTaskbar = $False
$Font = New-Object System.Drawing.Font("Tahoma",10,    [System.Drawing.FontStyle]::Bold)
$Form.Font = $Font
$Label = New-Object System.Windows.Forms.Label
$Label.Text = ""
$Label.AutoSize = $True
$Form.Controls.Add($Label)

'       Button 1 - Reboot Server'

$Button1 = new-object System.Windows.Forms.Button
$Button1.Location = new-object System.Drawing.Size(234,51)
$Button1.Size = new-object System.Drawing.Size(77,55)
$Button1.AutoSize = $True
$Button1.Add_Click({start-process "Reboot.lnk"})
$Button1.FlatStyle = [System.Windows.Forms.FlatStyle]::Flat
$Button1.FlatAppearance.BorderSize=0
$Button1.BackColor = "Transparent"
$Button1.ForeColor = "Transparent"
$Button1.FlatAppearance.MouseDownBackColor = "Transparent"
$Button1.FlatAppearance.MouseOverBackColor = "Transparent"
$Button1.FlatAppearance.BorderColor = "#252525"
$Form.Controls.Add($Button1)
'----------------------------------------
$Form.ShowDialog() | Out-Null
Exit 0

1 Ответ

0 голосов
/ 13 октября 2018

Для позиций в стиле гаджета попробуйте использовать небольшой фрагмент, который я сделал:

$Poistion = 'RightBottom'
$Coordinates = switch ($Poistion)
{
    'LeftTop' { 0, 0 }
    'LeftBottom'  { 0, $([System.Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Bottom - $Form.Height) }
    'RightTop' { $([System.Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Width - $Form.Width), 0 }
    'RightBottom' { $([System.Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Width - $Form.Width), $([System.Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Bottom - $Form.Height) }
}
$Form.Location = New-Object System.Drawing.Point($Coordinates)

Чтобы сохранить форму в момент, когда вы активируете «Показать рабочий стол», установите для свойства TopMost значение * 1005.* и MinimizeBox свойство до $False.Например:

$Form.TopMost = $True
$Form.MinimizeBox = $False

Когда вы нажимаете Show Desktop или используете его горячую клавишу (Win+D), Windows пытается отправить команду Minimize All запущенным приложениям.После сворачивания всех окон, которые можно свернуть, он берет рабочий стол и «поднимает» его до верха стека окон, чтобы другие окна его не закрывали.

Вы также можете попытаться использовать события определения размера.Вот так:

$Form_Resize={
    $Form.WindowState = 'Normal'
}
$Form.add_Resize($Form_Resize)
...