异类的屏幕保护

原创 2003年07月31日 09:44:00
 

我们知道,可以设定,当在一定的时间内没有对计算机进行任何操作时,启动屏幕保护程序。我们还可以规划计划任务,让电脑在某个设定的时间起动我们想进行的工作。这两个功能都是不错的构思,所以微软把它们一直保留了下来。不过,我们可能有更好的想法,希望能在电脑闲置一段时间后进行我们想做的工作,而不仅仅是启动屏幕保护程序。我们可以暂且称它为异类的屏幕保护。可是,我们怎么实现呢?

不会很难吧?对于我们学会编程的人来说,稍稍动动脑筋就行了。难道不是吗?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

我一开始也是这样想的。不过,当我真的动手时,发现有一个为难的地方:我们怎样判断电脑是闲置的呢?

不过这不要紧,我想。我们可以把启动的屏幕保护程序指向我们需要的任务嘛。不过,我想还有更好的方法。

这个方法我找到了,而且代码也很简洁。我想把我的心得发表出来,与大家共享。

如果我们做过钩子,不论是键盘钩子、鼠标钩子,或者是其它的系统钩子,一定还记得SetWindowsHookEx这个函数吧?我统计了一下,在《电脑爱好者》的程序谷中,这个函数也是频繁的出现。

不多说啦,今天的程序的核心就是SetWindowsHookEx这个函数了,没有其它要说明的地方。我原来想对程序添加注释,不过你看看程序吧,真的没有必要啊,所以就不多说什么了。哈哈!

程序在DELPHI6.0WINDOWS ME下编程通过。

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, StdCtrls,SHELLAPI;

 

type

  TForm1 = class(TForm)

    Label1: TLabel;

    Timer1: TTimer;

    procedure FormCreate(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

    var

    Form1: TForm1;

    hHook: integer;

    TimeTotal: integer;

    bNotRunning:boolean;

 

implementation

{$R *.DFM}

const

    Timescount = 10;

 

function JournalRecordProc(iCode: integer; wParam: wParam; lParam: lParam): LResult; stdcall;

begin

    TimeTotal := 0;

    Result := 0;

end;

 

function StartHook: Boolean;

begin

    Result := False;

    if hHook = 0 then

    begin

        hHook := SetWindowsHookEx(WH_JOURNALRECORD, JournalRecordProc, HInstance, 0);

        if hHook > 0 then        Result := True;

    end;

end;

 

procedure StopHook;

begin

    if hHOok > 0 then

    begin

        UnHookWindowsHookEx(hHook);

        hHook := 0;

    end;

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

    hHook := 0;

    bNotRunning:=True;

    StartHook;

end;

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

    inc(TimeTotal);

    label1.Caption := floattostr(TimeTotal);

    if (TimeTotal > Timescount) and bNotRunning then

    begin

      bNotRunning:=False;

      ShellExecute(Handle, 'open', PChar('notepad'),

               nil, nil, SW_SHOW);

    end;

end;

 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

    stophook;

end;

 

end.

程序很短吧?我仅仅启动了记事本,示范了我是怎样完成此功能的,并没有进行更多的考虑。如果你想使用此方法,我建议你首先要对你进行的任务进行更多的控制,包括启动、进度、过程、结束等。你也可以对任务进行列表。如果你不知道怎样控制外部程序,你可以去http://www.csdn.net参考我的另一篇拙文:《启动外部程序并等待它的结束》。

好了,除了屏幕保护和计划任务,你又多了一项选择了。就赶快实现它吧。

<<异类 不一样的成功启示录>>笔记以及读后感

第一章机遇   马太效应 凡是有的,还要加给他,叫他有余。没有的连他所有的,也要夺过来。 激情天分 勤奋,所有这些都是获得最大成功不可或缺的因素 在很多时候,我们在专注研究成功人士的成功原因...
  • dugaoda
  • dugaoda
  • 2016年01月30日 13:00
  • 1146

异类查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS选项

在查询分析器中,先输入两句     set   ansi_nulls   on     set   ansi_warnings   on     执行然后再     Create   Proc   存...
  • hbyh
  • hbyh
  • 2008年11月08日 19:45
  • 7059

用VB制作屏幕保护程序

用VB制作屏幕保护程序利用Visual Basic 制作屏幕保护程序非常容易。本文将详细给大家介绍制作屏幕保护程序的方法。 ---- 一. 基本编程思路 ---- 大家都知道屏幕保护程序就是利用变换的...
  • firetoucher
  • firetoucher
  • 2001年09月10日 18:53
  • 1345

U盘中病毒后文件变为屏幕保护程序恢复方法

可能是中病毒了插上你的U盘,不要打开,也不要点击任何“文件夹”。看一下U盘的盘符,假设为“X:”,记住。 点击“开始”——“运行”——输入“cmd”——运行,出来一个黑色窗口(命令提示符) 接着输入“...
  • kevin_cyj
  • kevin_cyj
  • 2016年05月10日 19:38
  • 7542

Screen Killer —— 我的C++“屏幕保护程序”

0.简介       早前学C++的Win32编程,了解了一点创建窗口的知识,就想写个屏幕保护程序什么的。。。 1.成品        结果是写成了这个Screen Killer:大概就...
  • tobeC3sdn
  • tobeC3sdn
  • 2011年12月12日 18:15
  • 847

屏幕保护等待时间灰色

由于未知原因,我的机器不能自动锁屏了。原本,自动锁屏是通过屏幕保护程序配合激活时需要密码来进行的,但是现在屏幕保护的时间没的选了,灰色,固定为 60 分钟。 看到这里: http://ibm.c...
  • rongwenbin
  • rongwenbin
  • 2015年01月13日 15:02
  • 2022

C#制作简易屏幕保护

下面就介绍一下如何利用C#制作屏幕保护。 打开Visual Studio.net,建立一个windows项目。这次的屏保是模仿Windows 7自带的一个屏幕保护。 把窗口的属性设置一下: 1....
  • tsinfeng
  • tsinfeng
  • 2011年02月27日 14:08
  • 1817

控制屏幕保护程序API函数的C++类封装

控制屏幕保护程序API函数的C++类封装by 郭世龙简 介      前几天在codeproject上看到了一篇关于用C#封装控制的屏幕保护程序的文章,觉的很有用于是决定将其改装成C++类封装以供C+...
  • xylary
  • xylary
  • 2007年08月11日 00:00
  • 3652

【操作系统】CentOS 7 图形界面下关闭屏幕保护

CentOS7 图形界面下关闭屏幕保护 图形界面模式下方法: 1. 点击菜单栏Application—System Tools—Setting,在Setting对话框中点击Hardware区域的P...
  • j790675692
  • j790675692
  • 2016年06月22日 15:29
  • 5997

《outliers》/《异类》读后有所思

我曾经听过一句话,看一百本《我是怎么成功的》,不如看一本《我是如何失败的》,谈论成功总有马后炮一般事后乱放炮的感觉,而谈论失败却可以给人以启发。所以我可能更喜欢看别人的失败而不是看别人的成功。即使你看...
  • u013816144
  • u013816144
  • 2016年11月28日 20:34
  • 326
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:异类的屏幕保护
举报原因:
原因补充:

(最多只允许输入30个字)