能不能做到不关闭窗体,其它程序就无法运行(100分)

B

bincle

Unregistered / Unconfirmed
GUEST, unregistred user!
一个程序,就只有一个窗体,而这个窗体始终处于最前面。如果不关闭这个程序的话,
其它程序都不能使用。
比如WINDOWS 2000的“我的电脑”不能按,“开始”也不能使用。

 
肯定可以,只是我也不知道
 
我可以提供一种思路,把鼠标锁定在只能关闭这个窗体的按钮的区域,
在适当时的时候用锁定代码锁定鼠标,然后再关闭窗体里面加入解锁代码,代码如下:

{锁定的代码... ...}
var LockRect:TRect;
begin
MapWindowPoints(Handle, 0, LockRect, 2);
ClipCursor(@LockRect);
end;

{解锁的代码... ...}
var FreeRect: TRect;
begin
FreeRect:= Rect(0, 0, Screen.Width, Screen.Height);
ClipCursor(@FreeRect);
end;
 
我在程序中曾使用隐藏桌面图标和任务栏的方法,对鼠标的限制完全没问题;
但是用户仍可以通过WINDOWS的STAR键来调出其他程序,但用户电脑常识不多的话,
就可以这样做:)
 
用hook
用消息看看
 
程序里还个循环, 一发现窗体不是自己的, 就关掉, 一发现进程不是自己的, 就停掉
 
俺只知道对付windows family家族的办法:用16破程序可以堵塞所有线程。windows nt
系列的可以看看windows shutdonw窗口的原理。
 
沒錯可以用hook!(但我認為不是很好)
當有鍵盤之類的動作時!就判斷一下當前窗口是不是本窗口,如果不是kill掉當前窗口﹒
使本窗口到最前面!

或者幹脆做成和網吧管理軟件一樣!
別人就沒辦法用其他軟件了!
 
做成屏幕保护程序,不过NT下就难点了
 
参考以下代码:

var
task:pointer;
procedure TForm1.Button1Click(Sender: TObject);
begin
{除了Form 窗口无效}
task:=DisableTaskWindows(Handle);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
{除了Form 有效}
EnableTaskWindows(Task);
end;



查阅可视窗口标题

下面只是举出一个例子提供参考:运用API函数GetWindow()配合GetWindowText()逐一查出各视窗的标题

1. File | New Project 开始一个新的工程
2. 在 Form1 中安排 Button 与 Memo 各一
3. 在 Button1 的 OnClick 事件中撰写程式如下:
procedure TForm1.Button1Click(Sender: Tobject);
var
hCurrentWindow: HWnd;
szText: array[0..254] of char;
begin
hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
if GetWindowText(hCurrentWindow, @szText, 255)>0
then Memo1.Lines.Add(StrPas(@szText));
hCurrentWindow:=
GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;
end;

 
俺曾经做个类似的软件,
解决方法很简单,你把system.ini中的shell=你的程序,就一切OK了
整个桌面只运行你的程序,(当然,你的程序中要有一个关机按钮,不然连机器都关不了)
 
同意gong666的方法
 
顶部