程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 異類的屏幕保護

異類的屏幕保護

編輯:Delphi
我們知道,可以設定,當在一定的時間內沒有對計算機進行任何操作時,啟動屏幕保護程序。我們還可以規劃計劃任務,讓電腦在某個設定的時間起動我們想進行的工作。這兩個功能都是不錯的構思,所以微軟把它們一直保留了下來。不過,我們可能有更好的想法,希望能在電腦閒置一段時間後進行我們想做的工作,而不僅僅是啟動屏幕保護程序。我們可以暫且稱它為異類的屏幕保護。可是,我們怎麼實現呢? 不會很難吧?對於我們學會編程的人來說,稍稍動動腦筋就行了。難道不是嗎? 我一開始也是這樣想的。不過,當我真的動手時,發現有一個為難的地方:我們怎樣判斷電腦是閒置的呢? 不過這不要緊,我想。我們可以把啟動的屏幕保護程序指向我們需要的任務嘛。不過,我想還有更好的方法。 這個方法我找到了,而且代碼也很簡潔。我想把我的心得發表出來,與大家共享。 如果我們做過鉤子,不論是鍵盤鉤子、鼠標鉤子,或者是其它的系統鉤子,一定還記得SetWindowsHookEx這個函數吧?我統計了一下,在《電腦愛好者》的程序谷中,這個函數也是頻繁的出現。 不多說啦,今天的程序的核心就是SetWindowsHookEx這個函數了,沒有其它要說明的地方。我原來想對程序添加注釋,不過你看看程序吧,真的沒有必要啊,所以就不多說什麼了。哈哈! 程序在Delphi6.0+Windows 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;
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved