Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Получить снимок экрана наподобие RAdmin/DameWare


Автор: Budy 15.11.2007, 05:58
:Приветствую
Делаю программу управления рабочим компом из дома. И вот озадачился. Необходимо получить снимок экрана. Вы, конечно, сейчас думаете "блин, почему ты не пользуешься поиском!". Спешу опередить Ваши недовольства, мне необходимо необычное "фотканье" экрана.
Дело в том, что по простою (когда долго ничего за компом не делать) компьютер блокируется и выходит в логон. Другими словами скрывается рабочий стол пользователя и выводится окно ввода пароля для разблокировки компьютера. Если в этом случае делать снимок средствами BitBlt, то вместо снимка рабочего стола я получаю белый "холст". Тот же холст программа выведет если она работает под одним пользователем на компьютере, а активен совершенно дургой.
Заметил, что программы Remote Administrator как и Dame Ware используют другую технологию, а точнее получают тот поток вывода графики, который выводится напрямую на монитор.
Я пробовал искать исходники подобных программ, но все в пустую.

Автор: MetalFan 15.11.2007, 09:11
знаю тут одного человека, который с такой задачкой разбирался...
жди, может он заметит эту тему)

Автор: Budy 15.11.2007, 12:08
MetalFan, можешь подсказать, что за человек? smile

Автор: Alexeis 15.11.2007, 15:03
Budy, Ak47black активно решал этот вопрос. Можешь запустить поиск по его нику, не пропустишь нужную тему smile .

Добавлено через 4 минуты и 31 секунду
О вот оно http://forum.vingrad.ru/index.php?show_type=forum&showtopic=131826

Автор: Budy 16.11.2007, 07:03
Посмотрел... это не то. В привиденной теме говорят про видео/аудио. А меня интерисует единичный снимок экрана.

Автор: RA 17.11.2007, 05:03
а не может быть так что в данных условиях  BitBlt доступно только сервисам и системным процессам ?

Добавлено через 11 минут и 3 секунды
ps: а через GetDC тоже не работает?

Автор: Ak47black 17.11.2007, 15:46
Если стол неактивен то и прорисовываться он не будет, поэтому ты и получаешь белую прямоугольник. Хотя незнаю.

Автор: Budy 19.11.2007, 06:12
RA, с GetDC собсно и не получается:
Код

with TBitMap.Create do
  begin
    Width:=Screen.Width;
    Height:=Screen.Height;
    BitBlt(Canvas.Handle, 0, 0, Screen.Width, Screen.Height, GetDC(GetDesktopWindow), 0, 0, SRCCopy);
    SaveToFile('snap.bmp');
    Free;
  end;


Автор: Budy 19.11.2007, 07:46
Ak47black, однако тот же Remote Administrator без проблем получает картинку...

Автор: Ak47black 19.11.2007, 12:37
Он юзает свой драйвер дисплея.
Проше уж заглянуть в DRKB3 и написать в поиске Получение изображения экрана, и заюзать чтото из тех функций, чем делать этот драйвер.
+ Если понял правильно Remote Administrator работает как Service, а не как обычная запушенная прога, ведь если ты будешь делать Logoff то и прога твоя выгрузиться.

Автор: Budy 20.11.2007, 06:13
Ak47black, Radmin не обязательно может работать как сервис, его сервер можно также запускать от имени юзера. 
Программа не будет выгружается при логофе, она работает, вот попробуй вот этот код:
Код

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Tag:=Timer1.Tag+1;
  with TBitMap.Create do
  begin
    Width:=Screen.Width;
    Height:=Screen.Height;
    BitBlt(Canvas.Handle, 0, 0, Screen.Width, Screen.Height, GetDC(GetDesktopWindow), 0, 0, SRCCopy);
    SaveToFile('snap'+IntToStr(Timer1.Tag)+'.bmp');
    Free;
  end;
end;

Попробуй запустить программу и выйти в логоф, потом снова зайти.
Во время логофа у меня и на рабочем компе (Windows Server 2003) и на домашнем (XP SP2) отображает белую картинку.

Добавлено через 12 минут и 53 секунды
В DRKB уже все перелазил, ничего не могу найти... может руки кривые, ищу не так? Пробовал по содержанию смотреть, пробовал поиском пользоваться пос ловам: экран снимок изображение поток и пр. Везде примеры с BitBlt или даже PaintDesktop'ом (а это просто копирование картинки рабочего стола). Пробовал искать исходники, все сводится к одному.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)