Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

Как сделать снимок с экрана с курсором мыши?   Найти похожие ветки 

 
Chaser ©   (2005-12-26 11:20) [0]

Есть код, делающий снимок с экрана с курсором мыши, но он очень медленно работает (примерно 30 миллисекунд).
Код:

// Скриншот с курсором
function CaptureScreen: TBitmap;
var
DC: HDC;
ABitmap: TBitmap;
MyCursor: TIcon;
CursorInfo: TCursorInfo;
IconInfo: TIconInfo;
begin
// Capture the Desktop screen
DC:=GetDC(GetDesktopWindow);
ABitmap:=TBitmap.Create;
try
 ABitmap.Width:=GetDeviceCaps(DC, HORZRES);
 ABitmap.Height:=GetDeviceCaps(DC, VERTRES);
 // BitBlt on our bitmap
 BitBlt(ABitmap.Canvas.Handle, 0, 0, ABitmap.Width, ABitmap.Height,
      DC, 0, 0, SRCCOPY);
 // Create temp. Icon
 MyCursor:=TIcon.Create;
 try
  // Retrieve Cursor info
  CursorInfo:=GetCursorInfo2;
  if CursorInfo.hCursor<>0
  then
   begin
    MyCursor.Handle:=CursorInfo.hCursor;
    // Get Hotspot information
    GetIconInfo(CursorInfo.hCursor, IconInfo);
    // Draw the Cursor on our bitmap
    ABitmap.Canvas.Draw(CursorInfo.ptScreenPos.X-IconInfo.xHotspot,
                          CursorInfo.ptScreenPos.Y-IconInfo.yHotspot, MyCursor);
   end;
 finally
  // Clean up
  MyCursor.ReleaseHandle;
  MyCursor.Free;
 end;
finally
 ReleaseDC(GetDesktopWindow, DC);
end;
Result:=ABitmap;
end;

Image1.Picture.Assign(CaptureScreen);

Прошу поделиться кодом либо соображениями как ускорить процесс получения скриншота с курсором мыши.

Заранее благодарен.


 
Eraser ©   (2005-12-26 13:04) [1]


> Chaser ©   (26.12.05 11:20)

Принципально -- никак. Немного возможно оптимизировать можно.


 
Woolen ©   (2005-12-27 11:46) [2]

По большому счету, никак, но, может быть, попробовать прорисовать текущий курсор в его координатах на снятом с экрана растре?


 
Chaser ©   (2005-12-27 12:20) [3]

Это занимает много ресурсов, вылетает с ошибкой.


 
Woolen ©   (2005-12-27 12:32) [4]


> Это занимает много ресурсов, вылетает с ошибкой.

Извини, не прочитал код. Брякнул сразу...


 
Woolen ©   (2005-12-27 12:54) [5]

procedure TForm1.FormClick(Sender: TObject);
var
 Bmp: TBitmap;
 TmpCanvas: TCanvas;
 CRect: TRect;
begin
TmpCanvas := TCanvas.Create;
TmpCanvas.Handle := GetDC(0);
Bmp := TBitmap.Create;
Bmp.Width := Screen.Width;
Bmp.Height := Screen.Height;
Bmp.PixelFormat := pf24bit;
CRect := Rect(0,0,Screen.Width - 1,Screen.Height - 1);
Bmp.Canvas.CopyRect(CRect,TmpCanvas,CRect);
if not DrawIcon(Bmp.Canvas.Handle,Mouse.CursorPos.X,Mouse.CursorPos.Y,GetCursor)
 then
 ShowMessage("Ошибка!");
ReleaseDC(0,TmpCanvas.Handle);
TmpCanvas.Free;
Form1.Canvas.StretchDraw(Rect(0,0,Form1.Width - 1,Form1.Height - 1),Bmp);
Bmp.Free;
end;


 
Woolen ©   (2005-12-27 12:55) [6]

У меня так все копируется в битмап, выводится курсор и выводится на экран. Несколько раз попробовал - ни разу не упало. Замерять производительность не пробовал, но "на глаз" работает моментально.


 
Woolen ©   (2005-12-27 13:14) [7]

Да, и Screen.Height,Width - это я так, для простоты. Он не учитывает TaskBar. Через GetDeviceCaps, действительно, правильно.


 
Woolen ©   (2005-12-27 14:42) [8]

Вру, со Screen все впорядке. Это не он виноват, но, что TaskBar не виден



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
2-1147463888
Naduev Aleksei
2006-05-12 23:58
2006.05.28
DLL


9-1129495654
Fosgen
2005-10-17 00:47
2006.05.28
Событие отпускания кнопки мыши в DirectX


9-1130783574
NightLord
2005-10-31 21:32
2006.05.28
Text в DelphiX


8-1135601307
plotn
2005-12-26 15:48
2006.05.28
По lame и mp3 не поможете?


15-1146722158
MrShadow_
2006-05-04 09:55
2006.05.28
Электронный справочник по Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский