多年来,我的应用程序一直采用一种模式,客户可以“禁用对操作系统的访问”。显然,此功能违背了常规(至少就 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 键)工作?