Друзья,
Нужно сделать скриншот всего рабочего стола БЕЗ МОЕЙ ФОРМЫ и загрузить в TImage. Успех в Windows XP, 7 - только с ALPHABLEEND = TRUE + ПРОЦЕДУРА СКРИНШОТА.
Но тот же код не работает в Windows 8 - захват всего экрана, ВКЛЮЧАЯ ФОРМУ.
Я знаю, что проблема связана с AERO - DWM.EXE - успешное использование pssuspend.exe (sysinternals) - приостановка winlogon.exe и уничтожение dwm.exe
Кто-нибудь может сказать мне, как захватить весь рабочий стол без моей формы также в Windows 8?
prntscr.com/314rix - УСПЕХ В WIN7
prntscr.com/314tj7 - НЕУДАЧА В WIN8
prntscr com/31502u - ПРИОСТАНОВИТЬ WINLOGON.EXE и УБИТЬ DWM.EXE В WIN8
www sendspace com/file/b5oxhb - ИСХОДНЫЙ КОД
// FORM -> ALPHABLEND -> TRUE
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,
Clipbrd;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
ScrollBox1: TScrollBox;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure ScreenShot(DestBitmap: TBitmap);
var
DC: HDC;
begin
DC:=GetDC(GetDesktopWindow);
try
DestBitmap.Width:=GetDeviceCaps(DC, HORZRES);
DestBitmap.Height:=GetDeviceCaps(DC, VERTRES);
BitBlt(DestBitmap.Canvas.Handle,0,0,DestBitmap.Width,DestBitmap.Height,DC,0,0,SRCCOPY);
finally
ReleaseDC(GetDesktopWindow, DC);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ScreenShot(Image1.Picture.Bitmap);
end;
end.