У моего приложения в течение многих лет был режим, в котором клиент может «отключить доступ к ОС».Очевидно, что эта функция идет вразрез (по крайней мере, в том, что касается Windows), но есть установки, где мое приложение является единственной программой, которая должна быть доступна оператору машины, и в этом случае такая функция полезна.
Техника, которую я использовал, была построена из нескольких «слоев»:
- Скрыть панель задач и кнопку.
- Отключить переключение задач.
- Отключить мой основнойСистемные значки формы.
Чтобы отключить панель задач, я использовал:
// Get a handle to the taskbar and its button..
Taskbar := FindWindow('Shell_TrayWnd', Nil);
StartButton := FindWindow('Button', Nil);
// Hide the taskbar and button
if Taskbar <> 0 then
ShowWindow( Taskbar, SW_HIDE );
if StartButton <> 0 then
ShowWindow( StartButton, SW_HIDE );
// Set the work area to the whole screen
R := Rect( 0,0,Screen.Width,Screen.Height );
SystemParametersInfo(
SPI_SETWORKAREA,
0,
@R,
0 );
Это сработало хорошо и все еще хорошо работает на W7.Исследование того, как отключить переключение задач несколько лет назад, обнаружило единственную технику «притворения», что ваше приложение является заставкой (кроме ужасных вещей, таких как переименование приложения в «explorer.exe», загрузка в него и т. Д.):
procedure EnableTaskSwitching( AState : boolean );
// Enables / disables task switching
begin
SystemParametersInfo(
SPI_SCREENSAVERRUNNING,
Cardinal( not AState),
nil,
0 );
end;
Неудивительно, что в W7 это никак не сказывается (я думаю, что оно работает в XP и т. Д.).Кто-нибудь знает другой, лучший способ включить / отключить Alt-Tab (и другие специальные клавиши Windows) от работы?