Вопрос или проблема
Я настраиваю киоск/компьютер POS, который запускает определённые приложения из загрузчика. Я всё настроил так, как мне нужно, за исключением одной вещи.
Я могу закрывать запущенные приложения (например, Chrome или IE), но я не хочу иметь возможность их минимизировать, так как панель задач отключена.
Как мне полностью отключить минимизацию (или найти аналогичное решение для достижения этой цели)?
Правка: Одно из возможных решений, которое я попробовал, — это выполнение этого скрипта PowerShell каждые несколько секунд:
$dllInfo = '[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);'
Add-Type -MemberDefinition $dllInfo -name NativeMethods -namespace Win32
foreach($proc in Get-Process){
$hwnd = $proc.MainWindowHandle
# Восстановление окна
[Win32.NativeMethods]::ShowWindowAsync($hwnd, 4) | Out-Null
}
Но это привело к тому, что мой процессор был перегружен до состояния, когда он стал непригодным для использования. Есть ли другие идеи или улучшения для этого?
Существует несколько продуктов Windows, которые поддерживают ограничение функций для киосков. Автоматическая перезагрузка, блокировка панели задач, управление окнами, предотвращение использования Explorer, блокировка специальных клавиш и т. д. В прошлом я использовал SiteKiosk, но прошло время, и я не знаю, обошёл ли его что-то более современное с тех пор.
Некоторые, возможно, полезные ссылки:
Ответ или решение
Для настройки киоска или POS-компьютера, который запускает определенные приложения через лаунчер, важно правильно управлять поведением окон этих приложений, особенно если необходимо предотвратить их сворачивание. Ниже приведены несколько методов, которые помогут вам решить эту задачу.
1. Использование специализированного программного обеспечения для киосков
Одним из самых простых и эффективных способов управления работой окон является использование специализированного программного обеспечения для киосков. Существуют продукты, такие как SiteKiosk, которые предлагают функции ограничения доступа к системному интерфейсу, включая блокировку возможности сворачивания окон. Это ПО часто включает в себя следующие функции:
- Автоматический перезапуск приложений.
- Блокировка задач панели задач.
- Защита от использования файлового менеджера Windows.
- Блокировка определённых сочетаний клавиш.
Такое программное обеспечение может быть особенно полезно, если вам нужно управлять несколькими устройствами, так как оно предоставляет множество настроек для гибкой конфигурации.
2. Изменение свойств приложения
Если вы хотите пойти более техническим путем, можно изменить свойства запускаемых приложений. Некоторые приложения позволяют вам задавать параметры запуска, которые предотвращают сворачивание окон. Например, если вы запускаете Chrome, можно использовать следующий параметр:
--start-maximized
Включив этот параметр, вы можете запускать Chrome в максимизированном состоянии, и он не будет сворачиваться, когда пользователь пытается закрыть другие окна.
3. Системные настройки и изменения реестра
Чтобы предотвратить сворачивание окон, вы также можете использовать редактор реестра Windows для изменения некоторых системных настроек. Однако будьте внимательны, так как это требует определённых знаний о работе с реестром и может повлиять на работу других функций Windows.
- Откройте редактор реестра: Нажмите
Win + R
, введитеregedit
и нажмитеEnter
. - Перейдите к следующему ключу:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System
- Создайте новый параметр: Нажмите правой кнопкой мыши, выберите "Создать" > "DWORD (32-битный)" и назовите его
NoMinimize
. - Установите значение: Установите значение в
1
.
Это изменение может заблокировать возможность сворачивания окон для всех приложений. Однако рекомендуется протестировать это решение на отдельном устройстве, прежде чем применять его на производственной машине, чтобы избежать неожиданных последствий.
4. Исправление PowerShell-скрипта
Ваш первоначальный скрипт на PowerShell, который использует ShowWindowAsync
, действительно может привести к нагрузке на процессор, если работает в бесконечном цикле. Вместо повторного выполнения скрипта через определенные интервалы времени, рекомендуется использовать более оптимизированный подход, например, использовать событие Windows для отслеживания изменения состояния окна и реагировать на него.
Однако, если вы все же хотите использовать подобный метод, рассмотрите возможность внедрения небольшой задержки (Start-Sleep
) в цикл, чтобы снизить загрузку ЦП и сделать процесс более управляемым:
while ($true) {
$dllInfo = '[DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);'
Add-Type -MemberDefinition $dllInfo -name NativeMethods -namespace Win32
foreach($proc in Get-Process){
$hwnd = $proc.MainWindowHandle
# Восстановление окна
[Win32.NativeMethods]::ShowWindowAsync($hwnd, 4) | Out-Null
}
Start-Sleep -Seconds 1 # Задержка в 1 секунду
}
Заключение
Наиболее эффективным и безопасным решением для предотвращения сворачивания окон в киоске/POS-системе является использование специализированного программного обеспечения, так как оно уже предлагает необходимые функции и защиту. Однако, если вы хотите больше контроля, можно использовать комбинацию изменений в свойствах запуска приложений и настроек реестра. Также обратите внимание на оптимизацию PowerShell-скрипта, чтобы избежать ненужной нагрузки на систему.