Цитата:
Сообщение от 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.