在自编屏保程序中,如何在控制面版中设置口令,及如何较对口令?(50分)

  • 主题发起人 主题发起人 songguolong
  • 开始时间 开始时间
S

songguolong

Unregistered / Unconfirmed
GUEST, unregistred user!
1、如何在自编的屏保程序中启用控制面版中的口令设置来设置共享口令?

2、退出运行着的屏保程序时采用如下方法进行口令较对, 为什么不能取消?

procedure TfrmScreenSaver.CloseIfOk;
var hLib:THandle;
P:function(Parent:THandle):Boolean; stdcall;
SysDir:String;
NewLength:Integer;
Registry:TRegistry;
OSVer:TOSVersionInfo;
begin
//首先检测windows版本,因为NT和win98/95处理方法不同
OSVer.dwOSVersionInfoSize:=SizeOf(OSVer);
GetVersionEx(OSVer);
if OSVer.dwPlatformID=VER_PLATFORM_WIN32_WINDOWS then //如果是win98/95
begin
Registry:=TRegistry.Create;
Registry.RootKey:=HKEY_CURRENT_USER;
if Registry.OpenKey('Control Panel/desktop',false) then
begin
if Registry.ReadInteger('ScreenSaveUsePassword')< >0 then
begin
ShowCursor(True); //激活鼠标
//从系统目录动态调入库PASSWORD.CPL
SetLength(SysDir,MAX_PATH);
NewLength:=GetSystemDirectory
(PChar(SysDir),MAX_PATH);
SetLength(SysDir,NewLength);
if (length(SysDir)>0) and (SysDir[length(SysDir)]< >'/') then
SysDir:=SysDir+'/';
hLib:=LoadLibrary(PChar(SysDir+'PASSWORD.CPL'));
if hLib=0 then
Close //如果DLL没找到,直接关闭程序
else
begin //显示口令校验对话框
P:=GetProcAddress(hLib,'VerifyScreenSavePwd');
if P(Handle) then
//校验成功则关闭
Close;
FreeLibrary(hLib); //释放PASSWORD.CPL
end;
ShowCursor(False); //隐藏鼠标
end
else
Close;
end
else
Close;
end
else
if OSVer.dwPlatformID=VER_PLATFORM_
WIN32_NT then //如果是Windows NT
begin
//口令被NT控制, 直接关闭程序即可
Close;
end
else
//既不是NT也不是Win9x,直接关闭程序
Close;
end;
 
1? 这段代码是我写的也! :-)

有什么问题吗? 说具体一点.
 
是, 是阁下写的, 本人从本论坛中摘的, 谢谢! 现在的问题是: 屏保程序退出
时运行本子程序的时候, 只能正确回答口令, 然后自动退出屏保的运行, 而不能
取消口令的回答,而让屏保程序继续运行,却是为何? 这是其一。
另外自己写的屏保程序为何不能在控制面版的系统设置中采用统一的密码设置来设
置口令,是不是什么地方写的不够“标准”。
本论坛中阁下回答了不少有价值的问题,佩服!
 
直接责任人都来了,我们靠后了 :)
 
1.我写的saver好像没有你说的问题哦,我晚上回家看一看;

2.你根本没必要自己设置口令,因为我的代码校验的口令就是控制面板里面
统一设置的口令呀. 也就是说,你在控制面板里面设置了口令,就相当于
给你自己的saver设置了口令.

3.七十我大部分贴子是灌水的,活跃气氛而已.:-)
 
问题是我在按屏幕保护的密密码[更改]时没反映啊!
 
另外,在鼠标移动事件中调用CloseIfOk来校对屏保口令时, 为什么[取消]后立即
又进入CloseIfOk的调用,如何避免?
 
????????????
 
>>问题是我在按屏幕保护的密密码[更改]时没反映啊!
看不懂.说清楚一点.

>>为什么[取消]后立即又进入CloseIfOk的调用,如何避免?
因为鼠标又移动了贝.哪个screensaver都是这样的.
想避免就用键盘确认密码.或者,你纪录鼠标的位移吧,移动超过
一定距离才认为是Close.(其实我觉得没有这个必要)

抱歉拨号上网实在速度太慢,我好不容易才进来.
 
>>因为鼠标又移动了贝.所以[取消]后立即又进入CloseIfOk的调用。哪个
screensaver都是这样的.
此解释我接受了!

>>问题是我在按屏幕保护的密码[更改]时没反映啊!看不懂.说清楚一点.

我的意思是: 自编的屏保程序如何使用系统的统一设置接口来设置密码?
现在的症状是在 鼠标右点/属性/屏幕保护程序/选择我的屏保程序/密码保护/更改
时, 系统没有弹出输入口令的对话框!
 
我也碰到过问题,不知怎么解决,关注!
 
我晚上看一看吧
 
据俺以为,屏保里不需要设置密码。一切都推到WINDOWS头上。
 
>>据俺以为,屏保里不需要设置密码。一切都推到WINDOWS头上。

是, 由WINDOWS设置密码, 但现在不能进行(如上所述)
但屏保里应该校对密码。
 
????????????????
 
对不起,我忘了. 今天晚上八.
 
附加功能 将问题提前
 
songguolong:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
关注,正是我想问的.
 
后退
顶部