Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как делать снимки экрана. максимально быстро 
:(
    Опции темы
Sunvas
Дата 21.4.2006, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Нужно  написать небольшой просмотрщик удаленного экрана. Есть прома - как максимально бысто делать снимки с удаленного экрана?
Функция bitblt делает это очень вяло, да и удаленный комп страшно глючит, а дос режим вообще отказывается фоткать.
Помогите найти альтернативное решение. 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Guedda
Дата 21.4.2006, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Код

procedure TForm1.Button1Click(Sender: TObject);
var
  DeskTop: TCanvas;
begin
  DeskTop := TCanvas.Create;
  try
    with DeskTop do
      Handle := GetWindowDC(GetDesktopWindow);
    with Image1.Canvas do
      CopyRect(Rect(0, 0, 200, 200),
        DeskTop,
        Rect(0, 0, 200, 200))
  finally
    DeskTop.Free;
  end
end;
 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Snowy
Дата 21.4.2006, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Sunvas @  21.4.2006,  07:07 Найти цитируемый пост)
 Есть прома - как максимально бысто делать снимки с удаленного экрана
У многих такая же проблема

Цитата(Sunvas @  21.4.2006,  07:07 Найти цитируемый пост)
а дос режим вообще отказывается фоткать.
Правильно. И не должно.

Цитата(Sunvas @  21.4.2006,  07:07 Найти цитируемый пост)
Помогите найти альтернативное решение. 
DirectDraw

Цитата(Guedda @  21.4.2006,  07:15 Найти цитируемый пост)
CopyRect
Это тот же BitBlt, только в дельфёвой обертке. 
PM MAIL   Вверх
Guedda
Дата 21.4.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Цитата(Snowy @  21.4.2006,  10:07 Найти цитируемый пост)
Это тот же BitBlt, только в дельфёвой обертке.  

Извиняюсь... Не знал. Самому стало интересно...

Snowy, а как реализовать 
Цитата(Snowy @  21.4.2006,  10:07 Найти цитируемый пост)
DirectDraw

 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Sunvas
Дата 22.4.2006, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Snowy @  21.4.2006,  09:07 Найти цитируемый пост)
У многих такая же проблема

Ну так давайте соберемся и обсудим вместе!



Цитата(Snowy @  21.4.2006,  09:07 Найти цитируемый пост)
Цитата(Sunvas @  21.4.2006,  07:07 )    
а дос режим вообще отказывается фоткать.    
Правильно. И не должно.

А как же быть?


Цитата(Guedda @  21.4.2006,  11:54 Найти цитируемый пост)
Snowy, а как реализовать 

Цитата(Snowy @  21.4.2006,  10:07 )    
DirectDraw

Меня это тоже заинтерисовало. 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Rouse_
Дата 22.4.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



Скорость снятия снимка тебя не должна интересовать т.к. это делается достаточно быстро. Можешь проверить, отображая снимки сразуже на экране на той-же машине. Торможение в другом, а именно в ограничении пропускной способности канала. Правильное решение отправлять не картинку, а только изменения которые произошли с изображением с момента предыдущей передачи... 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 23.4.2006, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Rouse_ @  22.4.2006,  20:59 Найти цитируемый пост)
Торможение в другом, а именно в ограничении пропускной способности канала.

Ну с передачей данных у меня все хорошо.

Цитата(Rouse_ @  22.4.2006,  20:59 Найти цитируемый пост)
Скорость снятия снимка тебя не должна интересовать т.к. это делается достаточно быстро

Ну если делать снимков 12 в секунду то да, а вот если более чем 24 то тут происходят глюки.

Цитата(Rouse_ @  22.4.2006,  20:59 Найти цитируемый пост)
Можешь проверить, отображая снимки сразуже на экране на той-же машине.

Даже если это делать так. Но ведь есть и еще одна проблемма - фоткать Directdraw и ДОС режим такие функции вообще отказываются. Что ж делать?

Цитата(Rouse_ @  22.4.2006,  20:59 Найти цитируемый пост)
Правильное решение отправлять не картинку, а только изменения которые произошли с изображением с момента предыдущей передачи... 

Посоветуй, пожалуйста, как это реализовать.
 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Rouse_
Дата 23.4.2006, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



Цитата(Sunvas @  23.4.2006,  01:19 Найти цитируемый пост)
фоткать Directdraw и ДОС режим такие функции вообще отказываются. Что ж делать

Естественно отказываются т.к. вывод в данных режимах происходит насобственный оверлей. Тебе нужно подключиться к нему и снять изображение. Как это сделать читай тут: http://www.delphimaster.ru/articles/directx/index.html

Добавлено @ 08:45 
Цитата(Sunvas @  23.4.2006,  01:19 Найти цитируемый пост)
Посоветуй, пожалуйста, как это реализовать.

Сканировать две картинки и орагинизовывать массив по каким координатам какой пиксель изменился. Отправлять этот массив и отображать его на конечной машине. Ну а реализацию, думаю сам смошь нарисовать smile 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Loader
Дата 23.4.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.4.2006

Репутация: 1
Всего: 1



Самый быстрый из известных мне способов. Чистый WinAPI и никакого BitBlt(). Снимает и DOS окна и все остальное.

Код

procedure ScreenShot(const Width, Height: LongInt; const Filename: PChar);
var
  Bih: TBitmapInfoHeader;
  Bfh: TBitmapFileHeader;
  CDC, DC: HDC;
  CBmp: HBitMap;
  Bmp: Pointer;
  BmpInfo: TBitMapInfo;
  F, Written, Size: LongWord;
  
begin
  DC := GetDC(0);
  CDC := CreateCompatibleDC(DC);

  Bih.biSize := SizeOf(TBitmapInfoHeader);
  Bih.biWidth := Width;
  Bih.biHeight := Height;
  Bih.biPlanes := 1;
  Bih.biBitCount := GetDeviceCaps(DC, BITSPIXEL) * GetDeviceCaps(DC, PLANES);
  if Bih.biBitCount = 32 then Bih.biBitCount := 24;

  Bfh.bfType := $4D42;
  Bfh.bfOffBits := SizeOf(TBitmapFileHeader) + SizeOf(TBitmapInfoHeader);

  Size := Width * Height * 3;
  BmpInfo.bmiHeader := Bih;
  CBmp := CreateDIBSection(DC, BmpInfo, 0, Bmp, 0, 0);
  SelectObject(CDC, CBmp);
  StretchBlt(CDC, 0, 0, Width, Height, DC, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SRCCOPY);

  F := CreateFile(Filename, GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0);
  WriteFile(F, Bfh, SizeOf(TBitmapFileHeader), Written, nil);
  WriteFile(F, Bih, SizeOf(TBitmapInfoHeader), Written, nil);
  WriteFile(F, Bmp^, Size, Written, nil);
  CloseHandle(F);
end;
  

Это сообщение отредактировал(а) Loader - 23.4.2006, 15:06
PM MAIL   Вверх
Rouse_
Дата 23.4.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



Loader
1. данный способ не может быть самым быстрым т.к. используется вызов StretchBlt заведомо дольше исполняющийся в отличие от BitBlt.
2. в данном примере присутствуют утечки памяти, ввиду неразрушения захваченых обьектов ядра. 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Yanis
Дата 23.4.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Loader @  23.4.2006,  15:05 Найти цитируемый пост)
Чистый WinAPI и никакого BitBlt().

Может быть тебя это расстроит, но BitBlt и есть функция Windows API


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 24.4.2006, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Rouse_ @  23.4.2006,  08:42 Найти цитируемый пост)
Сканировать две картинки и орагинизовывать массив по каким координатам какой пиксель изменился. Отправлять этот массив и отображать его на конечной машине. Ну а реализацию, думаю сам смошь нарисовать 

Так еще больше глючить будет... 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Yanis
Дата 24.4.2006, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Sunvas @  24.4.2006,  00:19 Найти цитируемый пост)
Так еще больше глючить будет...  

А RAdmin по твоему картинки по сети шлёт smile 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 24.4.2006, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Loader, а в каком формате сохраняет твоя процедура рисунок?? - у меня сохраненный файл весит 54 байта, какой программой его нужно открывать? smile

Добавлено @ 00:57 
Цитата(Yanis @  24.4.2006,  00:34 Найти цитируемый пост)
А RAdmin по твоему картинки по сети шлёт  

А я не знаю, как он действует, да и ты я думаю тоже не знаешь до конца. Или у тебя есть исходники? К тому же ДОС режим и режим игры он тоже не фоткает.. 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Yanis
Дата 24.4.2006, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Sunvas @  24.4.2006,  00:45 Найти цитируемый пост)
К тому же ДОС режим и режим игры он тоже не фоткает..

Это подтверждает, что он не использует сниятие скриншотов для передачи состояния удалённого экрана. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0902 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.