精华内容
下载资源
问答
  • Windows屏保程序

    2017-11-11 17:24:10
    漂亮的屏保程序,酷炫的3D宇宙风景。可用于Windows和Mac
  • windows屏保程序

    2008-11-14 15:25:12
    windows屏保程序,直接放在C:\WINDOWS下即可
  • windows屏幕保护程序

    2010-09-23 18:15:55
    很漂亮的屏幕保护程序 1.下雨屏保 2.绚丽火焰屏保 3.。。。。。
  • 真正的windows屏幕保护程序 雪花屏保 真正的windows屏幕保护程序 雪花屏保 真正的windows屏幕保护程序 雪花屏保 真正的windows屏幕保护程序 雪花屏保 真正的windows屏幕保护程序 雪花屏保 真正的windows屏幕保护程序...
  • 摘要:C#源码,系统相关,屏幕保护 C#启动Windows屏幕保护程序,点击程序窗口上的按钮,即可启动用户设置的Windows屏幕保护程序,功能仅此而已,初学者新手学习。
  • 这个小工具是Windows屏幕保护程序锁定的暂时避开。 尽管可以编辑注册表,但是在公司拥有的计算机上,通常会在登录时由GPO安全策略将其重置。 这个小实用工具是暂时允许绕过锁定,基本上是通过将鼠标移动一个像素或两...
  • 内容索引:VC/C++源码,系统相关,屏幕保护 禁止、启用windows屏幕保护程序VC源代码,一键禁止、一键打开,压缩包内分别包含禁止和启用的程序,两个是独立分开的,互不干涉,有经验的VC高手就不用看了,入门新兵可参考...
  • 禁止、启用windows屏幕保护程序 VC源代码 禁止、启用windows屏幕保护程序VC源代码,一键禁止、一键打开,压缩包内分别包含禁止和启用的程序,两个是独立分开的,互不干涉,有经验的VC高手就不用看了,入门新兵可参考...
  • Windows屏幕保护程序的制作

    千次阅读 2015-06-01 15:19:38
    Windows屏幕保护程序的制作 前些日子看了阿卓工作室的一篇关于如何制作屏保程序的文章及其示例,我便想自己做一个玩玩,所以按他说的做,结果不行,所以就在MSDN中搜索了下,得到这么一篇文章,翻译备份如下,以后要用得...

    Windows屏幕保护程序

     

                                          屏幕保护程序的制作

    Microsoft的WIN32API支持特殊类型程序-屏保程序的制作.当鼠标或键盘空闲一定的时间后屏保程序就会自动启动.之所以屏保的原因是:......

    这篇文章包括两个部分:
    1:关于屏保程序的使用
    2:如何调用屏保函数制作屏保程序

    1:关于屏保程序的使用
    在WINDOWS的控制面板中有一个程序,可以让用户从一个屏保列表中选择要使用的屏保程序,并指定空闲多长时间启动屏保,以及其它一些相关设置,另外还可以对屏保进行预览.屏保程序的启动一般由WINDOWS根据用户的设定自己启动,也可以由用户手动从控制面板启动.
    一旦选定了一个屏保程序,WINDOWS就会启动键盘及鼠标监视,在适当的时候启动屏保.但是在下述情况下WINDOWS不会自动启动屏保:
    当前活动的程序不是基于WINDOWS的应用程序.
    当前活动的程序是computer-based training (CBT)类型的.
    当前活动的程序接受到以SC_SCREENSAVE为wparam值的WM_SYSCOMMAND消息,但不把该消息传回DefWindowProc()函数.
    屏保程序包含指定的出口函数,资源定义以及变量声明.屏保链接库包括了主函数MAIN及一个屏保所需要的必要代码.当屏保程序启动时,链接库中的启动代码创建一个全屏的窗口.它的窗口类设置如下:

    WNDCLASS cls; 
    cls.hCursor        = NULL; 
    cls.hIcon          = LoadIcon(hInst, MAKEINTATOM(ID_APP)); 
    cls.lpszMenuName   = NULL; 
    cls.lpszClassName  = "WindowsScreenSaverClass"; 
    cls.hbrBackground  = GetStockObject(BLACK_BRUSH); 
    cls.hInstance      = hInst; 
    cls.style          = CS_VREDRAW  | CS_HREDRAW | CS_SAVEBITS | CS_DBLCLKS; 
    cls.lpfnWndProc    = (WNDPROC) ScreenSaverProc; 
    cls.cbWndExtra     = 0; 
    cls.cbClsExtra     = 0;
    为了创建一个屏保程序,开发者在大多数情况下只需创建一个包含三个必需函数的屏保模块并且将它与屏保库链接起来即可.一个屏保模块只负责设定自己以及提供视觉效果.
    三个必需函数中的一个是ScreenSaveProc()(译注:这个就是如上窗口类中指定的窗口处理函数),这个函数处理指定的几个消息并把未处理的消息传递给屏保链接库,下面是由ScreenSaveProc()函数处理的几个典型的消息:

    消息           含意
    WM_CREATE      从注册表文件Regedit.ini中找到初始化数据,并加以利用.设置一个TIMER.及其它初始化工作.
    WM_ERASEBKGND  擦除屏保窗口背景,为后来的窗口绘制做好准备.
    WM_TIMER       做绘制操作.
    WM_DESTROY     销毁先前创建的TIMER.做必要的清除工作.

    ScreenSaverProc()函数(通过屏保链接库)把自身未处理的消息传递给一个叫做DefWcreenSaverProc()的函数.下面描述了这个函数是如何处理各种消息的:
    消息                    响应
    WM_SETCURSOR            设定光标为NULL,并将之清除出屏幕
    WM_PAINT                绘制窗口背景
    WM_LBUTTONDOWN          终止屏保
    WM_MBUTTONDOWN          终止屏保
    WM_RBUTTONDOWN          终止屏保
    WM_KEYDOWN              终止屏保
    WM_MOUSEMOVE            终止屏保
    WM_ACTIVATE             如果消息的wParam参数为FALSE的话终止屏保.


    第二个必需的函数是ScreenSaverConfigureDialog()函数.这个函数显示一个可以让用户设置(译注:如果不知道何谓设置,请先设定一个屏保,在那儿点设置那个按钮就明白啦)关于你的屏保的一些参数的(译注:比如要显示的字,要显示的图片的位置...)对话框(一个应用程序必须提供一个对应的对话框模板).当用户在WINDOWS的控制面板中选择安装该屏保程序时WINDOWS就可以提供这个对话框给用户做相应设置.(译注:当然这个框中并不一定非设置些什么,可以只显示一些关于信息什么的,但这个对话框是必须要有的,因为如果没有的话当用户安装屏保时在那个面板上点设置按钮时,WINDOWS拿什么显示给用户?)
    第三个必需的函数是RegisterDialogClasses()函数,这个函数必须由屏保程序所调用.但是,如果你的屏保程序在设置对话框中不需要生成特殊窗口(译注:???)或者自定义的控件的话,这个函数可以简单的只返回一个TRUE就可以了.反之,则需要在这个函数中注册相应的窗口类!
    除了要提供如上所述的三个必需函数以外,一个屏保程序还必须有一个图标,这个图标只能在屏保程序以standalone application形态运行时才可见.(译注:什么是standalone application呢???)这个图标资源在屏保源文件中必须以ID_APP为其ID,这个ID是在屏保库文件的Scrnsave.h文件中定义的.
    最后一个必需做到的是一个屏保程序description string.屏保的源文件中必须包含一个字符串,(译注:估计这个字符串也是在屏保链接库中定义的)这个串是在屏保选择的那个地方用来显示对这个屏保的标示的.这个description string在资源文件中的字符串表中必须是第一个串(也就是说它的序号为1.)
    如何调用屏保函数制作屏保程序
    这个部分用从一个屏保程序中的示例代码来说明讲解下述几个任务:
    创建一个屏保程序.
    安装新屏保.
    为屏保设置对话框添加Help功能.
    下面先讲解如何创建一个屏保程序:
    在从1到10的一个时间范围内,例子中的这个程序用下面四种颜色:白,浅灰,深灰,黑中的一种颜色来重绘屏幕.这个程序当接受到一个WM_TIMER消息时做重绘.用户可以用一个在该屏保设置对话框中的垂直滚动条来调整这个间隔时间.
    屏保链接库:
    这些静态的屏保函数是包含在一个屏保链接库中的.有两种可以使用的版本:Scrnsave.lib或者Scrnsavw.lib.在你的工程中你必链接其中的一个.Scrnsave.lib是用于使用ANSI字符集的程序,而Scrnsavw.lib用于UNICODE字符集的屏保程序.一个链接了Scrnsavw.lib的屏保程序只能运行在支持UNICODE的WINDOWS平台上.而链接了Scrnsave.lib的屏保程序可以运行在任何WINDOWS平台上.
    (译注:下面是示例程序,就不贴了,把我自己的程序贴上来就可以了)
    因为我用的是笔记本电脑,我并不想用频繁重绘的屏保来损坏液晶屏,所以我打算写一个只显示一行静态文本的屏保程序,代码如下:

    #include <windows.h>
    #include <stdio.h>
    #include <scrnsave.h>
    #include "resource.h"
    #define TIMER_ID  1
    LRESULT CALLBACK ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
     static HDC hDC;
     static HPEN hPen,hOldPen;
     static CHAR str[100];
     int    iLength;
     switch (message){
     case WM_CREATE:
      SetTimer(hWnd, TIMER_ID, 500, NULL);
      return TRUE;
     case WM_TIMER:
      hDC=GetDC(hWnd);
      SetBkColor(hDC,RGB(0,0,0));
      SetTextColor(hDC,RGB(255,0,0));
      iLength=sprintf(str,"I can also make a ScreenSaver program for you!");
      TextOut(hDC,350,200,str,iLength);
      SelectObject(hDC, hOldPen);
      DeleteObject(hPen);
      ReleaseDC(hWnd, hDC);
      return TRUE;
     case WM_DESTROY:
      KillTimer(hWnd, TIMER_ID);
      return TRUE;
     default:
      return DefScreenSaverProc(hWnd,message,wParam,lParam);
     }
     return FALSE;
    }
    BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
     switch (message) {
     case WM_INITDIALOG:
      SetWindowPos(hDlg,HWND_NOTOPMOST,400,300,0,0,SWP_NOSIZE);
      return TRUE;
     case WM_COMMAND:
      EndDialog(hDlg, LOWORD(wParam));
      break;
     }
     return FALSE;
    }
    BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
    {
     return TRUE;
    }

    需要注意的是:
    1:在VC6中,要建一个Windows Application,而不是Windows Console Application.
    2:要在Project->Settings->link中的Object/library modules中加入:scrnsave.lib (或者scrnsavw.lib).
    3:对话框ID一定要设置为DLG_SCRNSAVECONFIGURE,图标的ID一定要设置为ID_APP.然后再找到New String Table这个图标,并在其中加入一个string:ID必须是IDS_DESCRIPTION,Caption可为任意.
    4:在resource.h文件中一定要有#include<scrnsave.h>这句.
    5:在VC的Project->Settings->Link选项卡中可以设置输出的文件名,你可以将输出的文件名的后缀改为.scr,使它直接输出屏幕保护程序文件,而不必每次都费力地去改名。
    6:如果你想在屏保中输出一副图片,可参考下面这段代码:

    LRESULT CALLBACK ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
     HINSTANCE      hInstance ;
     static HBITMAP hBitmap ;
     static HDC hDC, hdcMem;
     switch (message){
     case WM_CREATE:
      SetTimer(hWnd, TIMER_ID, 1000, NULL);
      hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
            hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_BITMAP1)) ;
      return TRUE;
     case WM_TIMER:
      hDC=GetDC(hWnd);
      hdcMem = CreateCompatibleDC (hDC);
      SelectObject (hdcMem, hBitmap);
      BitBlt (hDC,0,0,1024,768, hdcMem,0,0,SRCCOPY);
      DeleteDC (hdcMem) ;
      ReleaseDC(hWnd, hDC);
      return TRUE;
     case WM_DESTROY:
      DeleteObject (hBitmap) ;
      KillTimer(hWnd, TIMER_ID);
      return TRUE;
     default:
      return DefScreenSaverProc(hWnd,message,wParam,lParam);
     }
     return FALSE;
    }


    8:因为我将TIMER设置为1秒钟后才发WM_TIMER消息,所以只有在启动了屏保1秒之后才可以看到效果,那么如果我想在屏保一开始就看到输出的东西,该怎么做呢?应该可以在WM_CREATE中发送一个WM_TIMER消息给程序.我试了一下:
     

    case WM_CREATE:
      SetTimer(hWnd, TIMER_ID, 1000, NULL);
      hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
                hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_BITMAP1)) ;
      PostMessage(hWnd,WM_TIMER,TIMER_ID,NULL);
        return TRUE;
    

    是可以正确运行的.但这地方的问题是如果我用SendMessage()函数就不能实现目的,不知是为什么?
    9:我还是觉得一秒种就重绘一个位图还是不太好,所以我就改成了:

     case WM_TIMER:
      if(0==flag)
      {
       hDC=GetDC(hWnd);
       hdcMem = CreateCompatibleDC (hDC);
       SelectObject (hdcMem, hBitmap);
       BitBlt (hDC,0,0,1024,768, hdcMem,0,0,SRCCOPY);
       DeleteDC (hdcMem) ;
       ReleaseDC(hWnd, hDC);
       flag=1;
      }
     return TRUE;


     
     

    展开全文
  • 用VC++实现真正的Windows屏幕保护程序 大家可以在这个屏幕保护程序框架的基础上加入自己的实现
  • 使用 WPF 开发一个 Windows 屏幕保护程序 原文:使用 WPF 开发一个 Windows 屏幕保护程序 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行...
    原文: 使用 WPF 开发一个 Windows 屏幕保护程序

    版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系(walter.lv@qq.com)。 https://blog.csdn.net/WPwalter/article/details/85526502

    最近有小伙伴问我如何可以让 Windows 静置一段时间不操作之后,显示一个特殊的界面。我想了想,屏幕保护程序可以做到这一点,而且,屏幕保护程序的开发也是非常简单的。

    本文将介绍如何为 Windows 这一悠久的功能进行开发。


    屏幕保护程序的本质

    屏幕保护程序本质上就是一个 Win32 窗口应用程序。

    好了,这一节真的结束了……

    屏幕保护程序的本质

    编译好一个窗口应用程序之后,把扩展名改为 scr,于是你的屏幕保护程序就做好了。

    安装屏幕保护程序

    现在,在你的 scr 程序上点击右键,可以看到一个 “安装” 选项,点击之后就安装了。

    安装屏幕保护程序

    安装之后,你会立即看到我们的屏幕保护程序已经运行起来了。

    首次运行的屏幕保护程序

    为了方便截图,我调了下窗口大小。实际上本应该是 Visual Studio 创建的空 WPF 程序的默认大小。

    处理屏幕保护程序参数

    我的屏幕保护程序是一个非常简单的程序,几乎就是默认的模板。只是,现在加上了一点文字,输出命令行参数。

    <Window x:Class="Walterlv.DirextXDemo.Wpf.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            mc:Ignorable="d"
            Title="Walterlv.ScreenSaver" Height="450" Width="800">
        <Grid>
            <TextBlock x:Name="ArgsTextBlock" VerticalAlignment="Center" TextAlignment="Center" />
        </Grid>
    </Window>
    
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            Loaded += OnLoaded;
        }
    
        private async void OnLoaded(object sender, RoutedEventArgs e)
        {
            var args = Environment.GetCommandLineArgs().Skip(1).ToArray();
            Args.Text = string.Join(Environment.NewLine, args);
        }
    }
    

    在前面的截图中,我们看到参数是 “/p 8457636”,这是表示此程序需要在预览窗格中进行预览。

    还有其他参数,用于处理其他情况:

    • /s 屏幕保护程序开始,或者用户点击了 “预览” 按钮
    • /c:463970 用户点击了 “设置” 按钮
    • /p 8457636 用户选中屏幕保护程序之后,在预览窗格中显示

    屏幕保护程序参数

    实际上屏幕保护程序开始和预览是不同的。预览的时候,只会启动你的程序;而实际开始的时候,Windows 会先为你创建一个白色的背景,覆盖所有的屏幕,然后你的屏幕保护程序窗口显示在那个白色的背景之上。

    实际上运行时,后面有白色的背景

    请预防一些坑

    你可能会发现 Windows 自带的屏幕保护程序在 C:\Windows\System32 文件夹中。但!那不是你放屏幕保护程序的地方!如果把你的屏幕保护程序拷贝到那个 Windows 的受信任目录下,你的程序是无法运行起来的。正确的做法,是右键,使用 “安装” 选项进行安装。

    我后面附的链接中可能说屏幕保护程序还要有一些其他的要求,例如必须全屏、不要显示到任务栏等等。但那其实并不是强制性的要求,比如本文就显示了一个普通的窗口。


    参考资料


    我的博客会首发于 https://walterlv.com/,而 CSDN 和博客园仅从其中摘选发布,而且一旦发布了就不再更新。

    如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

    知识共享许可协议

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://blog.csdn.net/wpwalter),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

    posted on 2019-03-08 14:27 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/10495618.html

    展开全文
  • CruelMinimalClock是Windows屏幕保护程序,可与所有版本的Windows(包括Windows 10、8.1、8、7)一起使用。 特征 时钟颜色随脉冲效果而变化 使用大多数可用的Pt sans字体 黑色背景寻找低屏幕功耗 最小的外观 使用...
  • VideoLoopScreensaver:Windows屏幕保护程序,可使用Mpv.NET视频播放器完美地循环播放视频
  • Sam Shepard屏幕保护程序,John Heard屏幕保护程序,Nelsan Ellis屏幕保护程序,Jodie Whittaker屏幕保护程序,CJ Watson屏幕保护程序,Kyrie Irving屏幕保护程序,Gordon Hayward屏幕保护程序,Derrick Rose屏幕...
  • DVD屏幕保护程序 ... 从dist目录下载屏幕保护程序文件dvd-screensaver.scr并将其移动到C:\Windows\System32 。 右键单击它,然后选择“安装” 在屏幕保护程序设置菜单中,选择“ DVD屏幕保护程序”。 .py文件
  • 其中包含代码和可执行文件,只需将可执行文件的.exe格式改为.scr,并放到windows目录下的system32文件夹下,再添加就可以使用了!
  • Windows屏保程序思考

    2017-09-07 21:56:54
    和我公司写的直接调用Windows提供的接口不同。这样是直接生成一个.SCR的文件,在windo里面设置成使用它做...前些日子看了阿卓工作室的一篇关于如何制作屏保程序的文章及其示例,我便想自己做一个玩玩,所以按他说的做,
    和我公司写的直接调用Windows提供的接口不同。这样是直接生成一个.SCR的文件,在windo里面设置成使用它做屏保;而我做的是利用接口修改屏保时间,但是不能做到直接设置显示需要的图片。所以我采用的方法是显示为photos,然后在路径下修改图片,达到不同的button显示不同的屏保。
    以下转载:
    前些日子看了阿卓工作室的一篇关于如何制作屏保程序的文章及其示例,我便想自己做一个玩玩,所以按他说的做,结果不行,所以就在MSDN中搜索了下,得到这么一篇文章,翻译备份如下,以后要用得时候看:
    
    
    
                                          屏幕保护程序的制作
    
    Microsoft的WIN32API支持特殊类型程序-屏保程序的制作.当鼠标或键盘空闲一定的时间后屏保程序就会自动启动.之所以屏保的原因是:......
    
    这篇文章包括两个部分:
    1:关于屏保程序的使用
    2:如何调用屏保函数制作屏保程序
    
    1:关于屏保程序的使用
    在WINDOWS的控制面板中有一个程序,可以让用户从一个屏保列表中选择要使用的屏保程序,并指定空闲多长时间启动屏保,以及其它一些相关设置,另外还可以对屏保进行预览.屏保程序的启动一般由WINDOWS根据用户的设定自己启动,也可以由用户手动从控制面板启动.
    一旦选定了一个屏保程序,WINDOWS就会启动键盘及鼠标监视,在适当的时候启动屏保.但是在下述情况下WINDOWS不会自动启动屏保:
    当前活动的程序不是基于WINDOWS的应用程序.
    当前活动的程序是computer-based training (CBT)类型的.
    当前活动的程序接受到以SC_SCREENSAVE为wparam值的WM_SYSCOMMAND消息,但不把该消息传回DefWindowProc()函数.
    屏保程序包含指定的出口函数,资源定义以及变量声明.屏保链接库包括了主函数MAIN及一个屏保所需要的必要代码.当屏保程序启动时,链接库中的启动代码创建一个全屏的窗口.它的窗口类设置如下:
    
    WNDCLASS cls; 
    cls.hCursor        = NULL; 
    cls.hIcon          = LoadIcon(hInst, MAKEINTATOM(ID_APP)); 
    cls.lpszMenuName   = NULL; 
    cls.lpszClassName  = "WindowsScreenSaverClass"; 
    cls.hbrBackground  = GetStockObject(BLACK_BRUSH); 
    cls.hInstance      = hInst; 
    cls.style          = CS_VREDRAW  | CS_HREDRAW | CS_SAVEBITS | CS_DBLCLKS; 
    cls.lpfnWndProc    = (WNDPROC) ScreenSaverProc; 
    cls.cbWndExtra     = 0; 
    cls.cbClsExtra     = 0;
    为了创建一个屏保程序,开发者在大多数情况下只需创建一个包含三个必需函数的屏保模块并且将它与屏保库链接起来即可.一个屏保模块只负责设定自己以及提供视觉效果.
    三个必需函数中的一个是ScreenSaveProc()(译注:这个就是如上窗口类中指定的窗口处理函数),这个函数处理指定的几个消息并把未处理的消息传递给屏保链接库,下面是由ScreenSaveProc()函数处理的几个典型的消息:
    
    消息           含意
    WM_CREATE      从注册表文件Regedit.ini中找到初始化数据,并加以利用.设置一个TIMER.及其它初始化工作.
    WM_ERASEBKGND  擦除屏保窗口背景,为后来的窗口绘制做好准备.
    WM_TIMER       做绘制操作.
    WM_DESTROY     销毁先前创建的TIMER.做必要的清除工作.
    
    ScreenSaverProc()函数(通过屏保链接库)把自身未处理的消息传递给一个叫做DefWcreenSaverProc()的函数.下面描述了这个函数是如何处理各种消息的:
    消息                    响应
    WM_SETCURSOR            设定光标为NULL,并将之清除出屏幕
    WM_PAINT                绘制窗口背景
    WM_LBUTTONDOWN          终止屏保
    WM_MBUTTONDOWN          终止屏保
    WM_RBUTTONDOWN          终止屏保
    WM_KEYDOWN              终止屏保
    WM_MOUSEMOVE            终止屏保
    WM_ACTIVATE             如果消息的wParam参数为FALSE的话终止屏保.
    
    
    第二个必需的函数是ScreenSaverConfigureDialog()函数.这个函数显示一个可以让用户设置(译注:如果不知道何谓设置,请先设定一个屏保,在那儿点设置那个按钮就明白啦)关于你的屏保的一些参数的(译注:比如要显示的字,要显示的图片的位置...)对话框(一个应用程序必须提供一个对应的对话框模板).当用户在WINDOWS的控制面板中选择安装该屏保程序时WINDOWS就可以提供这个对话框给用户做相应设置.(译注:当然这个框中并不一定非设置些什么,可以只显示一些关于信息什么的,但这个对话框是必须要有的,因为如果没有的话当用户安装屏保时在那个面板上点设置按钮时,WINDOWS拿什么显示给用户?)
    第三个必需的函数是RegisterDialogClasses()函数,这个函数必须由屏保程序所调用.但是,如果你的屏保程序在设置对话框中不需要生成特殊窗口(译注:???)或者自定义的控件的话,这个函数可以简单的只返回一个TRUE就可以了.反之,则需要在这个函数中注册相应的窗口类!
    除了要提供如上所述的三个必需函数以外,一个屏保程序还必须有一个图标,这个图标只能在屏保程序以standalone application形态运行时才可见.(译注:什么是standalone application呢???)这个图标资源在屏保源文件中必须以ID_APP为其ID,这个ID是在屏保库文件的Scrnsave.h文件中定义的.
    最后一个必需做到的是一个屏保程序description string.屏保的源文件中必须包含一个字符串,(译注:估计这个字符串也是在屏保链接库中定义的)这个串是在屏保选择的那个地方用来显示对这个屏保的标示的.这个description string在资源文件中的字符串表中必须是第一个串(也就是说它的序号为1.)
    如何调用屏保函数制作屏保程序
    这个部分用从一个屏保程序中的示例代码来说明讲解下述几个任务:
    创建一个屏保程序.
    安装新屏保.
    为屏保设置对话框添加Help功能.
    下面先讲解如何创建一个屏保程序:
    在从110的一个时间范围内,例子中的这个程序用下面四种颜色:白,浅灰,深灰,黑中的一种颜色来重绘屏幕.这个程序当接受到一个WM_TIMER消息时做重绘.用户可以用一个在该屏保设置对话框中的垂直滚动条来调整这个间隔时间.
    屏保链接库:
    这些静态的屏保函数是包含在一个屏保链接库中的.有两种可以使用的版本:Scrnsave.lib或者Scrnsavw.lib.在你的工程中你必链接其中的一个.Scrnsave.lib是用于使用ANSI字符集的程序,而Scrnsavw.lib用于UNICODE字符集的屏保程序.一个链接了Scrnsavw.lib的屏保程序只能运行在支持UNICODE的WINDOWS平台上.而链接了Scrnsave.lib的屏保程序可以运行在任何WINDOWS平台上.
    (译注:下面是示例程序,就不贴了,把我自己的程序贴上来就可以了)
    因为我用的是笔记本电脑,我并不想用频繁重绘的屏保来损坏液晶屏,所以我打算写一个只显示一行静态文本的屏保程序,代码如下:
    #include <windows.h>
    #include <stdio.h>
    #include <scrnsave.h>
    #include "resource.h"
    #define TIMER_ID  1
    LRESULT CALLBACK ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
     static HDC hDC;
     static HPEN hPen,hOldPen;
     static CHAR str[100];
     int    iLength;
     switch (message){
     case WM_CREATE:
      SetTimer(hWnd, TIMER_ID, 500, NULL);
      return TRUE;
     case WM_TIMER:
      hDC=GetDC(hWnd);
      SetBkColor(hDC,RGB(0,0,0));
      SetTextColor(hDC,RGB(255,0,0));
      iLength=sprintf(str,"I can also make a ScreenSaver program for you!");
      TextOut(hDC,350,200,str,iLength);
      SelectObject(hDC, hOldPen);
      DeleteObject(hPen);
      ReleaseDC(hWnd, hDC);
      return TRUE;
     case WM_DESTROY:
      KillTimer(hWnd, TIMER_ID);
      return TRUE;
     default:
      return DefScreenSaverProc(hWnd,message,wParam,lParam);
     }
     return FALSE;
    }
    BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
     switch (message) {
     case WM_INITDIALOG:
      SetWindowPos(hDlg,HWND_NOTOPMOST,400,300,0,0,SWP_NOSIZE);
      return TRUE;
     case WM_COMMAND:
      EndDialog(hDlg, LOWORD(wParam));
      break;
     }
     return FALSE;
    }
    BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
    {
     return TRUE;
    }
    
    需要注意的是:
    1:在VC6中,要建一个Windows Application,而不是Windows Console Application.
    2:要在Project->Settings->link中的Object/library modules中加入:scrnsave.lib (或者scrnsavw.lib).
    3:对话框ID一定要设置为DLG_SCRNSAVECONFIGURE,图标的ID一定要设置为ID_APP.然后再找到New String Table这个图标,并在其中加入一个string:ID必须是IDS_DESCRIPTION,Caption可为任意.
    4:在resource.h文件中一定要有#include<scrnsave.h>这句.
    5:在VC的Project->Settings->Link选项卡中可以设置输出的文件名,你可以将输出的文件名的后缀改为.scr,使它直接输出屏幕保护程序文件,而不必每次都费力地去改名。
    6:如果你想在屏保中输出一副图片,可参考下面这段代码:
    LRESULT CALLBACK ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
     HINSTANCE      hInstance ;
     static HBITMAP hBitmap ;
     static HDC hDC, hdcMem;
     switch (message){
     case WM_CREATE:
      SetTimer(hWnd, TIMER_ID, 1000, NULL);
      hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
            hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_BITMAP1)) ;
      return TRUE;
     case WM_TIMER:
      hDC=GetDC(hWnd);
      hdcMem = CreateCompatibleDC (hDC);
      SelectObject (hdcMem, hBitmap);
      BitBlt (hDC,0,0,1024,768, hdcMem,0,0,SRCCOPY);
      DeleteDC (hdcMem) ;
      ReleaseDC(hWnd, hDC);
      return TRUE;
     case WM_DESTROY:
      DeleteObject (hBitmap) ;
      KillTimer(hWnd, TIMER_ID);
      return TRUE;
     default:
      return DefScreenSaverProc(hWnd,message,wParam,lParam);
     }
     return FALSE;
    }
    8:因为我将TIMER设置为1秒钟后才发WM_TIMER消息,所以只有在启动了屏保1秒之后才可以看到效果,那么如果我想在屏保一开始就看到输出的东西,该怎么做呢?应该可以在WM_CREATE中发送一个WM_TIMER消息给程序.我试了一下:
     case WM_CREATE:
      SetTimer(hWnd, TIMER_ID, 1000, NULL);
      hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
                hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_BITMAP1)) ;
      PostMessage(hWnd,WM_TIMER,TIMER_ID,NULL);
        return TRUE;
    是可以正确运行的.但这地方的问题是如果我用SendMessage()函数就不能实现目的,不知是为什么?
    9:我还是觉得一秒种就重绘一个位图还是不太好,所以我就改成了:
     case WM_TIMER:
      if(0==flag)
      {
       hDC=GetDC(hWnd);
       hdcMem = CreateCompatibleDC (hDC);
       SelectObject (hdcMem, hBitmap);
       BitBlt (hDC,0,0,1024,768, hdcMem,0,0,SRCCOPY);
       DeleteDC (hdcMem) ;
       ReleaseDC(hWnd, hDC);
       flag=1;
      }
      return TRUE;
    呵呵,这下好啦.
    10:其实在这个程序中有个主要的问题就是没从注册表中读信息,也没往注册表中保存用户设置,其实就压根没设置什么,呵呵,这是因为我还不会注册表的操作.
    11:现在我还不知道如何在MFC框架下做一个屏保程序. 
    展开全文
  • 矩阵屏保 描述: Matrix屏幕保护程序是电影中看到的绿色“ Matrix”密码代码的小型,快速且优雅的Windows版本。 最初由J Brown于2003年撰写。 网站: 支持: (c)2011-2021亨利++
  • 有两种方法:第一个方法是调用WinAPI 函数 PostMessage(GetDesktopWindow, WM_...我希望单击一个小程序开始屏幕保护,并调用密码保护(当屏幕保护运行的时候有效地锁定我的桌面),所以生成以下.dpr 文件:program ...
    有两种方法:

    第一个方法是调用WinAPI 函数 PostMessage(GetDesktopWindow, WM_SYSCOMMAND, SC_SCREENSAVE, 0)

    第二个方法是运行一个扩展名是.SCR 的屏幕保护文件。这个方法不可以调用密码保护。

    我希望单击一个小程序开始屏幕保护,并调用密码保护(当屏幕保护运行的时候有效地锁定我的桌面),所以生成以下.dpr 文件:

    program SaveScrn;

    uses
    Forms,
    Windows,
    Messages;

    {$R *.RES}
    var
    b: Bool;
    begin
    Application.Initialize;
    { 首先检查屏幕保护程序是否存在 }
    if (SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, @b, 0)
    and (b) then
    begin
    { 调用屏幕保护 }
    PostMessage(GetDesktopWindow, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
    end;
    Application.Terminate;
    end.

    现在运行这个应用程序,桌面将会变得安全。

    转载于:https://www.cnblogs.com/myamanda/articles/1523940.html

    展开全文
  • 首先安装moudle pywin32-219.win32-...该段程序只能够在Python的主进程中运行,在线程中起不起来,报如下错误: com_error: (-2147221008, 'CoInitialize has not been called.', None, None) 经查阅 ...
  • c# winform save screen 屏幕保护程序 windows 蓝屏 屏幕保护程序 源码
  • 酷炫Linux屏幕保护程序Windows版本。
  • 此文件是windowsXP屏幕保护程序的根本文件。 解压后打开测试即可!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,484
精华内容 20,193
关键字:

windows屏幕保护程序