Jak zrobić zrzut ekranu z bezpiecznym pulpitem (secure desktop) UAC w Windows 7?
0
Tu są fajne przykłady jak tworzyć swoje bezpieczne pulpity: http://blog.developex.com/?p=930
Niestety jeszcze nie doszedłem jak robić zrzuty z takich pulpitów.

- Rejestracja:około 14 lat
- Ostatnio:ponad 9 lat
0
Shooter napisał(a)
Da się, da. Odpal sobie TeamViewera i za jego pomocą zdalnie uruchom np. instalke lub program który odpala się poprzez UAC.
Ale teraz interesuje mnie to co jest pod maską. Więc jak ugryźć ten problem?
no teraz nie sprawdzę bo siedzę na xp
a TeamViewer pokazuje to okno czy to co jest pod spodem?
0
Kto wie czemu poniższy kod na Windows 7 robi czarne zrzuty ekranu?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
type
TCopyDesk = class(TService)
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceExecute(Sender: TService);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
procedure CopyScreen(const Index: Integer);
public
function GetServiceController: TServiceController; override;
end;
var
CopyDesk: TCopyDesk;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
CopyDesk.Controller(CtrlCode);
end;
procedure TCopyDesk.CopyScreen(const Index: Integer);
const
DefaultWindowStation = 'WinSta0';
DefaultDesktop = 'Default';
CAPTUREBLT = $40000000;
WINSTA_ALL_ACCESS = $0000037f;
var
Bmp: TBitmap;
hwinstaSave: HWINSTA;
hdeskSave: HDESK;
hwinstaUser: HWINSTA;
hdeskUser: HDESK;
dwThreadId: DWORD;
hdcScreen : HDC;
hdcCompatible : HDC;
hbmScreen : HBITMAP;
begin
hwinstaUser:= OpenWindowStation(DefaultWindowStation, FALSE, WINSTA_ALL_ACCESS);
hwinstaSave:= GetProcessWindowStation;
if hwinstaUser = 0 then
begin
OutputDebugString(PChar('OpenWindowStation failed' + SysErrorMessage(GetLastError)));
exit;
end;
if not SetProcessWindowStation(hwinstaUser) then
begin
OutputDebugString('SetProcessWindowStation failed');
exit;
end;
// hdeskUser:= OpenDesktop(DefaultDesktop, 0, FALSE, MAXIMUM_ALLOWED);
hdeskUser:= OpenInputDesktop(0, False, MAXIMUM_ALLOWED);
if hdeskUser = 0 then
begin
OutputDebugString('OpenDesktop failed');
SetProcessWindowStation (hwinstaSave);
CloseWindowStation (hwinstaUser);
exit;
end;
dwThreadId:= GetCurrentThreadID;
hdeskSave:= GetThreadDesktop(dwThreadId);
if not SetThreadDesktop(hdeskUser) then
begin
OutputDebugString(PChar('SetThreadDesktop' + SysErrorMessage(GetLastError)));
Exit;
end;
try
hdcScreen := GetDC(0);//GetDC(GetDesktopWindow);//CreateDC('DISPLAY', nil, nil, nil);
hdcCompatible := CreateCompatibleDC(hdcScreen);
hbmScreen := CreateCompatibleBitmap(hdcScreen,
GetDeviceCaps(hdcScreen, HORZRES),
GetDeviceCaps(hdcScreen, VERTRES));
SelectObject(hdcCompatible, hbmScreen);
bmp:= TBitmap.Create;
bmp.Handle:= hbmScreen;
BitBlt(hdcCompatible, 0,0, bmp.Width, bmp.Height, hdcScreen, 0,0, SRCCOPY OR CAPTUREBLT);
Bmp.SaveToFile('C:\Users\Public\Nowy folder2\' + IntToStr(Index) + '.bmp');
finally
DeleteDC(hdcScreen);
DeleteDC(hdcCompatible);
Bmp.Free;
Bmp:= nil;
end;
SetThreadDesktop(hdeskSave);
SetProcessWindowStation(hwinstaSave);
if hwinstaUser <> 0 then
CloseWindowStation(hwinstaUser);
if hdeskUser <> 0 then
CloseDesktop(hdeskUser);
end;
function TCopyDesk.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TCopyDesk.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
while not Terminated do
begin
Sleep(10);
ServiceThread.ProcessRequests(False);
end;
end;
procedure TCopyDesk.ServiceExecute(Sender: TService);
var
Index: Integer;
begin
Index:= 0;
while not Terminated do
begin
CopyScreen(Index);
Inc(Index);
ServiceThread.ProcessRequests(False);
// Sleep(1000);
// if Index = 4 then
DoStop;
end;
end;
procedure TCopyDesk.ServicePause(Sender: TService; var Paused: Boolean);
begin
Paused:= True;
end;
procedure TCopyDesk.ServiceShutdown(Sender: TService);
begin
Status:= csStopped;
ReportStatus();
end;
procedure TCopyDesk.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started:= True;
end;
procedure TCopyDesk.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Stopped:= True;
end;
end.