如何使一个应用程序运行时,不允许切换到其他程序中(200分)

  • 主题发起人 主题发起人 tangdongping
  • 开始时间 开始时间
T

tangdongping

Unregistered / Unconfirmed
GUEST, unregistred user!
如何使一个应用程序运行时,不允许切换到其他程序中(用鼠标点击,ALT+TAB等手段切换)
 
把FORM最大化,然后SHOWMOEDL
如果觉得不彻底,把系统功能全锁死。
 
var
temp: integer;
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @temp, 0);
end;
恢复: SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, @temp, 0);
 
响应WM_KILLFOCUS消息,一旦收到这个消息就Application.BringToFront,
仅仅是设想的没试过。
 
把自己设在最前,设置捕获鼠标,键盘等消息,应该可以满足一般要求。但不是绝对的,阻止

不了系统的权限。
 
哇,这程序也太霸道了嘛。结合snjat和caowei的应该就可以了。
 
1. 设置窗口界面最大,没有最小,最大,在系统的最前面:
BoardIcons:=[];
Left:=0;
Top:=0;
Width:=Screen.Width;
Height:=Screen.Height;

FormStyle:=fsNormal;
Show;
FormStyle:=fsStayOnTop;
Show;

2. 设置不能用Alt_TAB和Ctrl_Alt_Del
// 调用两次,因为有时不灵
SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,Nil,0);
SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,Nil,0);

3. 点"开始"-->"设置"--->"任务栏和开始菜单"-->"总在最前面"取消选择,
"自动隐藏"选择要。

大功告成!!!
 
程序运行时需要覆盖整个桌面,并且不允许用户用Alt+Esc、Ctrl+Esc等系统组合键来切换到其他程序。为达到此目的,可按以下步骤:

将Form的FormStyle属性设为fsStayOnTop
将Form的WindowState属性设为wsMaximized
在Form的OnCreate事件处理过程中为Windows发送一个屏幕保护程序正在运行的消息
当程序结束时清除屏幕保护程序运行标志。
示例代码:

procedure TForm1.FormCreate(Sender: TObject);
var
temp: Integer;
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @temp, 0);
end;

procedure Form1.OnClose(Sender: TObject; var Action: TCloseAction);

var
temp: Integer;
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, @temp, 0);
end;
 
use wh_sysmsgfilter,
==> ncode = msgf_nextwindow....
 
多人接受答案了。
 
后退
顶部