屏保如何编制成标准的win98类似的酷品!(200分)

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

scy_fjqz

Unregistered / Unconfirmed
GUEST, unregistred user!
我们的屏幕保护程序一般都能设置密码保护,<br>小窗口预览,更改密码,设置选项等功能.<br>也就是标准的屏幕报护,如何编制程序啊?<br>
 
这个问题已经有人回答过了,看看以前的问题吧<br>反正屏幕保护就是一般的EXE程序,只是有两个输入参数,<br>当输入参数为R时运行屏幕保护程序,为S时设置。
 
创建屏幕保护程序需要使用scrsave.h和scrsave.lib.<br>屏幕保护程序需要实现三个函数:ScreenSaveProc();ScreenSaverConfigerDialog<br>和RegisterDialogClasses。<br>函数作用ScreenSaverProc()这是屏幕保护程序的窗口过程。它被传递消息,并必须做出相应的反应ScreenSaverConfigureDialog()这是屏幕保护程序配置对话框的对话函数。如果不支持配置,则它可以是空的RegisterDialogClasses()此函数用于注册定制类的类型。如果不使用定制类,它可以是空的尽管这些函数名是由Windows 98定义的,但必须在屏幕保护程序的源代码中提供这些函数。<br>如有问题,请和 xmliu@263.net练习 <br>
 
keen哥果然大名远扬,佩服佩服,<br>
 
scrsave.h和scrsave.lib.<br>从那里得来啊?<br>初学不久,请不要见笑啊!
 
已答问题:<br>100796<br>97576<br>已经说得很明白了。自己看看API!<br>
 
哇,我又可以赚分了,嘻嘻 8)<br>--------------------------<br><br>什么scrsave.h+scrsave.lib,事实上用Delphi作屏保不用那么麻烦。<br>首先要做一个标准的Delphi程序,只是必须处理运行参数:一个是"/c";一个<br>是"/s"。/c表示Windows准备调用屏保的设置程序;/s表示Windows准备调用屏<br>保的实际代码部分。<br>其次,就是把编译通过的.exe文件重命名为.scr,放在"c:/windows"或者<br>"c:/windows/system/"都行。<br>下面讲一讲详细的方法。<br>屏保需要两个程序段:一个是设置用的程序段;一个是屏保的实际代码。<br>“实际代码”就是你屏保的内容,想怎么写就怎么写,除了必须要截获系统的mouse<br>移动消息和键盘击键消息以保证可以正常退出以外,其它的部分没有任何限制。<br>“设置程序段”实际上就是你的屏保和Windows之间的接口。在这个程序段中通过处理运行参数来判断到底是进入设置屏保还是运行屏保。这是整个程序的入口。<br><br>-----------------------------------<br>简单说就是这样,不知道能的多少分? 8)
 
可能在程序启动时为了避免用户按ctrl+alt+del关闭了程序,使口令无效,<br>还需要屏蔽了这些功能键.
 
嘿嘿,屏蔽这些功能键的方法就是向系统发屏幕保护的信息。
 
1.设置密码保护<br>见我以前的回答:<br>http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=130130<br><br>2.小窗口预览:<br>这个问题我曾经回答过,但找不到了,再把代码写一遍,有些变量是我自己<br>程序里面的,你自己斟酌...<br><br>当paramstr[1]的前2个字符为'/P',则需要在小窗口里面预览<br><br>//先定义一个函数,用来处理窗口消息<br>function MyWndProc(Wnd:HWnd; Msg:Integer; wParam:Word; lParam:Integer):Integer; far; stdcall;<br>begin<br>&nbsp; //如果需要关闭,则close<br>&nbsp; if (Msg=WM_DESTROY) or (Msg=WM_CLOSE) then<br>&nbsp; &nbsp; frmscreensaver.close<br>&nbsp; else<br>&nbsp; if Msg=WM_PAINT then<br>&nbsp; begin<br>&nbsp; &nbsp; //如果需要刷新,则画canvas....<br>&nbsp; end;<br>&nbsp; //调用默认WndProc<br>&nbsp; DefWindowProc(Wnd,Msg,wParam,lParam);<br>end;<br><br>procedure ExecPreview;<br>var WndClass:TWndClass;<br>&nbsp; &nbsp; Atom:TAtom;<br>&nbsp; &nbsp; DC:hDC;<br>&nbsp; &nbsp; MyWnd:hWnd;<br>&nbsp; &nbsp; Msg:TMsg;<br>begin <br>&nbsp; //第二个参数就是窗口句柄<br>&nbsp; ParamHandle:=StrToInt(ParamStr(2));<br>&nbsp; //定义一个窗口class<br>&nbsp; with WndClass do begin<br>&nbsp; &nbsp; style:=CS_PARENTDC;<br>&nbsp; &nbsp; lpfnWndProc:=@MyWndProc; &nbsp;//该类的WndProc指向自己定义的MyWndProc<br>&nbsp; &nbsp; cbClsExtra:=0;<br>&nbsp; &nbsp; cbWndExtra:=0;<br>&nbsp; &nbsp; hIcon:=0;<br>&nbsp; &nbsp; hCursor:=0;<br>&nbsp; &nbsp; hbrBackground:=0;<br>&nbsp; &nbsp; lpszMenuName:=NIL;<br>&nbsp; &nbsp; lpszClassName:='ScreenSaverClass';<br>&nbsp; end;<br>&nbsp; WndClass.hInstance:=hInstance;<br>&nbsp; //注册该class<br>&nbsp; Atom:=Windows.RegisterClass(WndClass);<br>&nbsp; //得到父窗口信息<br>&nbsp; GetWindowRect(ParamHandle, PrevRect);<br>&nbsp; pw:=(prevrect.right-prevrect.left);<br>&nbsp; ph:=(prevrect.bottom-prevrect.top);<br>&nbsp; Staticrect:=GetStretchRect(frmscreensaver.img0.width,frmscreensaver.img0.height);<br><br>&nbsp; PrevRect.Right:=PrevRect.Right-PrevRect.Left;<br>&nbsp; PrevRect.Bottom:=PrevRect.Bottom-PrevRect.Top;<br>&nbsp; PrevRect.Left:=0;<br>&nbsp; PrevRect.Top:=0;<br>&nbsp; //创建该父窗口的一个字窗口,将用来显示屏保画面<br>&nbsp; MyWnd:=CreateWindow('ScreenSaverClass','Window of the world',WS_CHILD or<br>&nbsp; &nbsp; &nbsp;WS_DISABLED or WS_VISIBLE,0,0,PrevRect.Right,PrevRect.Bottom,<br>&nbsp; &nbsp; &nbsp;ParamHandle,0,hInstance,nil);<br>&nbsp; //得到新建窗口的DC<br>&nbsp; DC:=GetDC(MyWnd);<br>&nbsp; //定义一个全局的canvas,用来在上面draw画面<br>&nbsp; PreviewCanvas:=TCanvas.Create;<br>&nbsp; PreviewCanvas.Handle:=DC; &nbsp; //将canvas属于该窗口<br>&nbsp; PreviewCanvas.brush.Color:=clblack;<br>&nbsp; PreviewCanvas.fillrect(prevrect);<br>&nbsp; logomode:=true;<br>&nbsp; PreviewCanvas.StretchDraw(staticrect,frmscreensaver.img0.picture.graphic);<br><br>&nbsp; //开始消息循环,所有消息将送到MyWndProc处理<br>&nbsp; while GetMessage(Msg,0,0,0) do begin<br>&nbsp; &nbsp; TranslateMessage(Msg);<br>&nbsp; &nbsp; DispatchMessage(Msg);<br>&nbsp; end;<br>end;<br><br><br>3.设置选项<br>当paramstr[1]的前2个字符为'/C',则需要进行设置,show你自己的setup form即可.<br><br>
 
不需要什么scrsave.h,scrsave.lib.<br>VC的最大毛病就是把简单问题复杂化.
 
其实delphi2高级编程里有一个这样的例子, 仔细看看, 有全套的source.
 
请你HTTP://vigour.126.com 上面有屏保专辑
 
提问者已转学vb了
 
时间太久,强制结束。 &nbsp; wjiachun<br>
 
后退
顶部