登陆窗口的超级难问题,至今未解决 ( 积分: 100 )

W

wh7211

Unregistered / Unconfirmed
GUEST, unregistred user!
楼上的各位朋友,感谢大家对我这个超级难的问题的关心,此问题仍未解决,问题依旧……
晶晶朋友,我现在利用你的方法可以实现:
1、开机出现登陆窗口,并且把鼠标锁定在登陆窗口范围内(利用clipcursor函数锁定鼠标);
2、用低级键盘钩子锁定win系统键。
[red][black]可是,只要我用ctrl+esc,就可以把鼠标解锁了,而且可以使用开始菜单了,最后可以操作计算机了。[/black][/red]看来还要把ctrl+esc锁定才行,还要锁定ctrl+alt+del键,这样和我的开始的想法相差的太远了,而且很麻烦。看来您的方法在我这里不适用了。不过还是要感谢晶晶热情的帮助。
[red]各位高手注意,我在本帖中希望实现的是:[/red]
登陆窗口只有正确登陆才消失,登陆不正确就始终显示在桌面上,不让他使用桌面和操作系统,就是象某些记费软件那样,登陆窗口显示时,桌面背景是暗的,类似于windows的登陆对话框。
真的就没有人解决吗?我这100分很难送吗?
 
W

wh7211

Unregistered / Unconfirmed
GUEST, unregistred user!
uiit,应该感谢你提供的资料。
我现在正在努力干活,应该很快就可以成功了。大家耐心点啊。等成功后我就分配积分了,来者有份啊。
 
U

uiit

Unregistered / Unconfirmed
GUEST, unregistred user!
to wh7221:
我以为你没看那个东西,所以我虽然订了帖子,却没有再回。
这种东西不能做到100%,但却可以最大程度实现你所要的
 
L

lfpsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
我来帮帮你吧,我有锁定ctrl+alt+del键的代码,对WinXP,Win2000,Win2003系统都有效!
http://delphibbs.com/delphibbs/dispq.asp?lid=2775843
 

晶晶

Unregistered / Unconfirmed
GUEST, unregistred user!
很久没有上来了。
你可以锁住你所需要锁住的组合键,这个到不是问题的,至于clipcursor你可以自己实现,实在不行(我现在在网吧,没有测试过。呵呵)我教你一个办法,将你的窗口大小设置为屏幕大小居中并置于最上显示就可以了,不要锁定鼠标就可以达到你的要求。祝你好运!
 

特尔斐

Unregistered / Unconfirmed
GUEST, unregistred user!
如果你想简单地实现这个目标(用户不通过你的登录验证就不能使用计算机),我可以告诉你一个简便的方法:
1、使用你的程序开机运行(或做成NT服务运行)
2、创建一个无边框且置顶的窗口并显示,在显示的同进启动一个多媒体定时器,每隔几毫秒执行一次将自己置顶的代码(很简单,用SetWindowPos),让自己总在最顶端显示,同时,要去掉窗体的关闭功能(只有验证通过后才能由代码关闭窗体),让Alt+F4快捷键无效。
OK,这样你就不用去搞什么底层钩子等东东,并且绝对有效!
 
W

wh7211

Unregistered / Unconfirmed
GUEST, unregistred user!
to lfpsoft:
谢谢lfpsoft。
我看了代码,有点复杂,不知道能不能屏蔽ctrl+esc键。据说win2k是不能屏蔽这3个键的。只好放一放了,以后有时间在研究。
 
W

wh7211

Unregistered / Unconfirmed
GUEST, unregistred user!
to 晶晶:将你的窗口大小设置为屏幕大小居中并置于最上显示就可以了,不要锁定鼠标就可以达到你的要求。
我试过了,不行的,用ctrl+esc就解开了。另外任务栏还在啊。
to 特尔斐:谢谢你的思路。我想我可以研究一下。这个应该有效,因为窗口永远显示在最顶端,用户无法操作,不过还要屏蔽ctrl+alt+del才行,不然就会被用户kill掉的。
 
W

wh7211

Unregistered / Unconfirmed
GUEST, unregistred user!
我要感谢大家对这个问题的关注。我的问题已经通过uiit朋友提供的资料解决了。资料地址是:http://www.obsof.com/delphi_tips/sysmodal.html
希望有兴趣的朋友一起研究一下。希望以后有时间再好好研究,我觉得这个问题很值得研究,可以做成一个通用的登陆界面。
还要感谢晶晶,lfpsoft,特尔斐提供的思路,对我都很有帮助,还有其他朋友,我就不一一道谢了。现在结帖,散分。
我的邮箱是wh7211@yahoo.com.cn
欢迎讨论。
 
W

wh7211

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
W

wh7211

Unregistered / Unconfirmed
GUEST, unregistred user!
需要说明的是,只能在xp下运行通过,2000下不能屏蔽ctrl+esc
 
W

wh7211

Unregistered / Unconfirmed
GUEST, unregistred user!
特尔斐
还要问一句,多媒体定时器怎么用?在哪里呢?我没有找到啊。谢谢了。分不够可以另开帖。
 
S

Siva

Unregistered / Unconfirmed
GUEST, unregistred user!
在此非常感谢uiit提供的建立系统模式对话框的资料
wh7211朋友向我询过具体的实现,因为没有好的示例可以解释,因此一直未能回复,深感抱歉
特尔斐先生提供的方法也是非常有效的
说实话不太赞成为了安全或保护软件而禁用操作系统功能的,除非软件专机专用,否则就是束手束脚了
 
W

wh7211

Unregistered / Unconfirmed
GUEST, unregistred user!
赞成siva的观点。
现在我没有采用uiit的方法来做我的记费系统的登陆界面。因为只能在xp下运行通过,2000下不能屏蔽ctrl+esc键。不过这个方法还是很好的,可以用在xp系统中。
我采用了更为简单的方法,我认为这个方法最适合我提出的需求,当然,这是建立在 特尔斐的观点之上的,不过,我没有采用多媒体定时器,我把我的方法列出来,供有需求的朋友借鉴。
方法如下:
1、窗口属性设置只需要下面两行代码,不需要窗口置顶;
borderstyle:=bsnone;
windowstate:=wsmaximized;
2、把窗口中加入一个image控件,picture选择一个图片,我使用桌面的背景经过高斯模糊处理后得到的图片。然后加入一个登陆的edit1和edit2,填写用户名和口令。
3、关键是这一步,没有这一步,用户可以随便按ctrl+alt+del或ctrl+esc或alt+tab或alt+F4等等来调出系统,从而使登陆窗口失效。我是这样想的,我的目的就是登陆,他只有输入正确才可以使用我的计算机,如果输入错误就不允许使用,那么我干吗还要屏蔽这些键呢?如果他要利用这些键企图非法登陆的话,我将采取如下措施,这样我的目的就达到了。
procedure TForm1.FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin
if(ssAlt in Shift) and (Key = 115) then
//115(F4)
Key := 0;
if key in [17,18,91,92,93] then
//17(CTRL);18(ALT);91(left_SYSWIN);92(right_syswin);93(print)
ExitWindowsEx(EWX_LOGOFF,0);
//注销计算机
end;
欢迎大家探讨。
 
顶部