急需解决两个小问题(80分)

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

Sachow

Unregistered / Unconfirmed
GUEST, unregistred user!
1、清除任务栏上的窗体僵尸!<br>我用的是Win98,遇到了它是固有Bug之一:在一个最大化的窗体关闭时,任务栏上会残留<br>窗体的标题,如果清除之?别告诉我不行,我见到有的程序不会有这个问题,不知是怎么<br>处理的?<br><br>2、如果打开设置屏幕保护程序密码对话框?是该调用哪一个可执行程序或是API?<br>
 
1.应该算是98的一个BUG,屏保运行完了也有僵尸的。估计你是把borderstyle 设为 none, 然后全屏的。<br><br>试试这么做:<br>procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>begin<br>&nbsp;width:=0;<br>end;<br>
 
谢谢王兄!第一个问题解决得真是又简单又好!<br><br>其他各位:还差第二个问题了,今天得解决才行,明天我的屏幕保护程序就要拿去演示了。
 
第二个问题你调用ScreenSaverConfigureDialog<br>具体你可以查MSDN
 
onedot: 能帮我试一下怎么用吗?我这里也在试,也许你能比我更早成功,不管谁先成功,<br>总之是越快越好。
 
经过研究Win32 SDK帮助文件,发现ScreenSaverConfigureDialog并不是用来更改屏保密码<br>的函数,我估计更改屏保密码的不是一个函数而是一个程序,望各位继续帮忙!
 
屏幕保护程序使用 /c 开关就可以弹出配置对话框。
 
var x:cardinal;<br>begin<br>x:=winexec('rundll32.exe shell32.dll,Control_RunDLL desk.cpl,<br>,1',9);<br>if x=0 then messagebox(0,'程序超出内存','错误',0);<br>if x=ERROR_BAD_FORMAT then messagebox(0,<br>'该程序非一个合法的Win32.EXE程序).','错误',0);<br>if x=ERROR_FILE_NOT_FOUND then messagebox(0,<br>'指定文件没找到','错误',0);<br>if x=ERROR_PATH_NOT_FOUND then messagebox(0,<br>'指定路径没找到','错误',0);<br>end;
 
To mikedeakins: 你可能还没明白,我说的是Windows的&lt;font color=red&gt;&lt;B&gt;公用&lt;/B&gt;&lt;/font&gt;的屏保密码<br>设置程序,就像你选中任意一个Windows的标准屏幕保护程序并点设置密码按钮时弹出的那<br>个窗体,而不是配置对话框。我不想自己做密码输入窗是因为不想设一个和Windows通用屏<br>保密码所不同的密码。<br><br>要是实在找不出该怎么调用设置屏保密码程序的话,谁知道怎样修改Windows屏保密码也行呀!<br><br>To bald_eagle: 抱歉,调试通不过。
 
在 nt 里,屏幕保护程序的密码验证是通过 winlogon 进程完成的(相当于重新登录)。<br>nt 里的屏幕保护根本没有密码可选。<br>在 95 里,密码保存在注册表里(我没有 win95,所以无法指出具体在哪里,和屏幕保护<br>有关的注册表项其实不多)。密码采用了很简单的加密方式,原来我编写过程序破解。<br>方法是密码字符逐个和一个字符串做XOR,字符串现在早忘了。应该可以查得到。
 
To mikedeakins: 查到了尽快告诉我哦。
 
window95的屏幕保护口令以 加密形式放在注册库HKEY_USERS/Control <br>Panel/desktop/ScreenSave_Data位置.<br>Window95共享目录口令与屏幕保护口令的加密方法是相同的,口令密文放在注<br>册库 <br>HKEY_LOCAL_MACHINE/SOFTWARE/micorsoft/windows/current_version/network <br>/lanman/目录名/Parm1enc和Parm2enc两位置,但有时注册库里缺少最后一个字符<br>的密文. <br>明文与数列(前八个数是35,9a,4d,a6,53,a9,d4,6a)作异或运算即得密文. <br>待续。。。<br>大家可以从密码破解工具里找一些软件实验一下。<br>续 巧解屏保密码 <br>
 
方法已经找到!<br>修改屏保密码应调用MPR.DLL中的PwdChangePasswordA,动态调用时可定义为:<br>typedef int (FAR WINAPI* _ChangePassword)(PUCHAR pcName, HWND hHandle,<br>&nbsp; &nbsp; int nArg3, int nArg4);<br>校验屏保密码应调用PASSWORD.CPL(在NT/2000下没有这个文件)中的<br>VerifyScreenSavePwd,动态调用时可定义为:<br>typedef bool (FAR WINAPI* _VerifyPassword)(HWND hHandle);<br><br>感谢wjiachun和mikedeakins。<br>
 
多人接受答案了。
 
后退
顶部