Здраствуйте !
Я пишу программу типа RAdmin. Она снимает скриншоты с десктопа и отправляет их в
сеть через сокет.
Я напоролся на проблему быстродействия API-функций GDI при получении снимков экрана.
Делаю я это так:
const BuffSize=1000;
var ScreenDC, MemDC:HDC;
Bitmap: HBITMAP;
buff: array[0..BuffSize-1] of byte; //буффер для хранения битмапа
begin
ScreenDC := GetDC(0);
MemDC := CreateCompatibleDC(ScreenDC);
Bitmap:=CreateCompatibleBitmap(ScreenDC, 1024, 768);
SelectObject(memDC,Bitmap);
BitBlt(MemDC,0,0,1024,768,ScreenDC,0,0,SRCCOPY);
GetBitmapBits(Bitmap, BuffSize, @buff); //Копируем битмап в буффер
// Некоторые действия пикселями в буффере, например шифрование и
пересылка буффера в сеть
// ......
ReleaseDC(0, ScreenDC);
end;
Оно то работает, но так тормозит, что даже мышь завмирает в Windows'e в
момент выполнения этого кода.
Тормоза вызваны главным образом функцией GetBitmapBits. Я ее вызываю
чтобы получить пиксели (битмап) и отправить их в сеть через сокет.
Пробовал я и другие АПИ функции GDI. Всегда при копировании изображения из экрана в
память возникает
завмирание мыши на пол секунды.
-------------------------
Если Вам не трудно, помогите советом (а то мне уже MSDN по ночам сниться
в виде кошмара):
Как мне обойти эту проблему с торможением и как можно получить
непосредственный доступ к пикселям десктопа без всяких там копирований ?
Может я вобще не в том направлении копать начал ?