Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako napraviti screenshot desktopa...

[es] :: Pascal / Delphi / Kylix :: Kako napraviti screenshot desktopa...

[ Pregleda: 2935 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Kako napraviti screenshot desktopa...01.10.2006. u 11:51 - pre 213 meseci
Kako snimiti screenshot desktopa u bmp formatu, ali preko cistog apija ? Ovaj kod bi trebao da preslika desktop u neku promenljivu (valjda), ali kako to onda snimiti u fajl ?

Code:

procedure TakeScreenshot(const AFileName : String);
var
  DC, DCC         : HDC;
  dskwnd          : HWND;
  BMPInfo         : TBitmapInfo;
  DIBBV           : pointer;
  DIBHandle       : HBITMAP;
  rwidth, rheight : DWORD;
  prevobj         : HGDIOBJ;
begin
  dskwnd := GetDesktopWindow;

  rwidth := GetSystemMetrics(SM_CXSCREEN);
  rheight := GetSystemMetrics(SM_CYSCREEN);

  DC := GetDCEx(dskwnd, 0, DCX_CACHE or DCX_WINDOW);

  DCC := CreateCompatibleDC(0);

  ZeroMemory(@BMPInfo, SizeOf(TBitmapInfo));
  BMPInfo.bmiHeader.biSize := SizeOf(BITMAPINFOHEADER);
  BMPInfo.bmiHeader.biBitCount := 24;
  BMPInfo.bmiHeader.biWidth := rwidth;
  BMPInfo.bmiHeader.biHeight := -rheight;
  BMPInfo.bmiHeader.biCompression := BI_RGB;
  BMPInfo.bmiHeader.biPlanes := 1;

  DIBHandle := CreateDIBSection(DC, BMPInfo, DIB_RGB_COLORS, DIBBV, 0, 0);
  GDIFlush;
  prevobj := SelectObject(DCC, DIBHandle);
  BitBlt(DCC, 0, 0, rwidth, rheight, DC, 0, 0, SRCCOPY);

  // ??????

  SelectObject(DCC, prevobj);
  DeleteObject(DIBHandle);
  DeleteDC(DCC);
  ReleaseDC(dskwnd, DC);
end;

 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Kako napraviti screenshot desktopa...01.10.2006. u 15:58 - pre 213 meseci
Primer P. Belowa.

Code:

Procedure SaveScreenImageToFile( Const afilename: String );
var
  ScreenCanvas: TCanvas;
  bmp: TBitmap;
  R: TRect;
begin
  ScreenCanvas:= TCanvas.Create;
  try
    ScreenCanvas.handle := CreateDC( 'DISPLAY', Nil, Nil, Nil );
    R:= Rect( 0, 0, Screen.Width, Screen.Height );
    bmp:= TBitmap.Create;
    try
      bmp.width := screen.width;
      bmp.height := screen.height;
      bmp.canvas.copyrect( R, ScreenCanvas, R );
      bmp.SaveToFile( aFilename );
    finally
      bmp.free;
    end;
  finally
    DeleteDC( ScreenCanvas.Handle );
    ScreenCanvas.Free;
  end;
end;

 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Kako napraviti screenshot desktopa...01.10.2006. u 16:39 - pre 213 meseci
To sam mogao i ja da napisem..

Citat:
Kako snimiti screenshot desktopa u bmp formatu, ali preko cistog apija ?
 
Odgovor na temu

SleepLess
SleepLess
Beograd

Član broj: 70723
Poruke: 70
*.gw.tehnicom.net.



+2 Profil

icon Re: Kako napraviti screenshot desktopa...05.10.2006. u 08:48 - pre 213 meseci
A da se lepo neko od vas podseti ascii kodova... jedna od mogucih varijanti je da pozovete ascii kod "print screen" funkcije... i onda samo to damujete u menoriju i to se lepo sacuva kao *.bmp... ako zelite mogu vam napisati kod... jako je prost... samo me sada smara da kuckam... odoK da dzonjam...
SleepLess over and out
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Kako napraviti screenshot desktopa...05.10.2006. u 14:28 - pre 213 meseci
Ma daj molim te.. :)
Anyway, dobio sam uputstvo kako da resim problem (nisam jos probao), ali trebalo bi da radi.

poz
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
195.252.99.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Kako napraviti screenshot desktopa...05.10.2006. u 14:57 - pre 213 meseci
Ajde ako radi taj kod podeli ga sa nama
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Kako napraviti screenshot desktopa...

[ Pregleda: 2935 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.