Я пишу пользовательский интерфейс для работы в WinPE. У меня пока все работает, и я пытаюсь сделать так, чтобы пользователь не мог закрыть окно. Я сделал его полноэкранным и отключил кнопку закрытия (X), но пользователь по-прежнему может нажать Alt + F4, чтобы закрыть пользовательский интерфейс. Я смог сделать так, что если пользователь нажимает F8, пользовательский интерфейс находится впереди, поэтому пользователь не может использовать Alt + Tab. Я прочитал так много способов сделать это, но ничего не касается PowerShell. Я не уверен, как реализовать это в сценарии. Он не работает в Runspace.
Вот что я пробовал:
$altF4Pressed = {
[System.Windows.Input.KeyEventArgs]$Alt = $args[1]
if ( ($Alt.Key -eq 'System') -or ($Alt.Key -eq 'F4') ) {
if ($_.CloseReason -eq 'UserClosing') {
$UI.Cancel = $true
}
}
}
$null = $UI.add_KeyDown($altF4Pressed)
Я также читал, чтобы сделать это (Отключение Alt+F4 в форме Powershell ), но это не работает.
#disable closing window using Alt+F4
$UI_KeyDown = [System.Windows.Forms.KeyEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.KeyEventArgs]
if ($_.Alt -eq $true -and $_.KeyCode -eq 'F4') {
$script:altF4Pressed = $true;
}
}
$UI_Closing = [System.Windows.Forms.FormClosingEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.FormClosingEventArgs]
if ($script:altF4Pressed)
{
if ($_.CloseReason -eq 'UserClosing') {
$_.Cancel = $true
$script:altF4Pressed = $false;
}
}
Else{
[System.Windows.Forms.Application]::Exit();
# Stop-Process $pid
}
}
$UI.Add_Closing({$UI_Closing})
$UI.add_KeyDown({$UI_KeyDown})
Я также пытался сделать это:
$UI.Add_KeyDown({
$key = $_.Key
If ([System.Windows.Input.Keyboard]::IsKeyDown("RightAlt") -OR [System.Windows.Input.Keyboard]::IsKeyDown("LeftAlt")) {
Switch ($Key) {
"F4" {
$script:altF4Pressed = $true;
write-host "Alt+f4 was pressed"
}
}
}
})
Он обнаруживает первое нажатие на клавиатуру, но не следующее, пока нажата другая. Я думаю, что вместо этого мне нужно использовать событие Keybinding, просто не знаю, как реализовать это в Powershell на уровне приложения (не на уровне ввода). Я читал, что вы можете добавить привязку клавиш к самому коду XAML, но как это сделать с помощью Powershell, чтобы определить комбинацию клавиш (Alt + F4), когда пользовательский интерфейс представляет себя?