Показать сообщение отдельно
  #3  
Старый 05.02.2014, 17:54
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от nixon232
...2)...
...3)...
2) Смотря чем и как перехватывает, или чистить буфер если через Prt Scr, или тогда ставить ловушку (хук либо внедрять подмену системной GetDeskTopWindow будет бардак) если вот так фоткают десктоп
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 DeskTopDC: HDC;
 DeskTopCanvas: TCanvas;
 DeskTopRect: TRect;
begin
 DeskTopDC := GetWindowDC(GetDeskTopWindow);
 DeskTopCanvas := TCanvas.Create;
 DeskTopCanvas.Handle := DeskTopDC;
 DeskTopRect := Rect(0, 0, Screen.Width, Screen.Height);
 Form1.Canvas.CopyRect(DeskTopRect, DeskTopCanvas, DeskTopRect);
 ReleaseDC(GetDeskTopWindow, DeskTopDC);
end;
но имхо, запрещать совсем не есть хорошо, может лучше делать "снимки", в смысле подсовывать или "белый экран" или с надписью типа "Чего творите!"

3) RegisterHotKey/UnregisterHotKey на время выполнения сборки


З.Ы. По первому вопросу, насчет нового экрана

Код:
unit desktop;
interface

implementation
uses windows;

var
 OldDesktop: THandle;

procedure SetDesktop;
var
 hDsk: THANDLE;
begin
 OldDesktop := GetThreadDesktop(GetCurrentThreadId);
 hDsk:=CreateDesktop("desk",nil,nil,0,
                   DESKTOP_READOBJECTS or DESKTOP_CREATEWINDOW  or DESKTOP_CREATEMENU  or
                   DESKTOP_HOOKCONTROL or DESKTOP_JOURNALRECORD or DESKTOP_JOURNALPLAYBACK or
                   DESKTOP_ENUMERATE or DESKTOP_WRITEOBJECTS or DESKTOP_SWITCHDESKTOP,
                   nil);
 SetThreadDesktop(hDsk);
 SwitchDesktop(hDsk);
 CloseDesktop(hDsk);
end;

initialization
 SetDesktop;

finalization
 SwitchDesktop(OldDesktop);
end.
Ответить с цитированием