GetFormImage() dla Handle

0

W TForm'ie mam ładną funkcję GetFormImage() dającą mi bitmapę z wizerunkiem mojego programu. Czy zna ktoś podobną funkcję zwracającą taki "wizerunek" formy innego programu, do którego mam uchwyt?

0

Gotowej nie ma , z FAQ do C++ Buildera

autorem jest Piotr Wójtowicz (Hetman)

Zapisywanie zrzutu wybranego programu do pliku

Jak wiecie to za pomocą klawisza PrintScreen można robić zrzut całego ekranu, a potem np. wklejać go do Paintbrusha i zapisywać jako bitmapę do pliku. Poniżej przedstawiam kod jak za pomocą kliknięcia przycisku Button1 zapisywać zrzut wybranego programu do pliku, trzeba tylko znać nazwę klasy tego programu, w tym przypadku jest to TAppBuilder, czyli Borland C++ Builder (a dokładniej to jego górna część z paskiem menu i komponentami), oczywiście program ten musi być widoczny, w przeciwnym razie nie ma co zrzucać:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   HWND BCBHandle = FindWindow("TAppBuilder", NULL);

   if (BCBHandle)
   {
      HDC dc = GetWindowDC(BCBHandle);
      Graphics::TCanvas *ScreenCanvas = new Graphics::TCanvas;
      Graphics::TBitmap *BMP = new Graphics::TBitmap;
      ScreenCanvas->Handle = dc;

      TRect rect = ScreenCanvas->ClipRect;
      rect.Right = rect.Right - rect.Left;
      rect.Bottom = rect.Bottom - rect.Top;
      rect.Top = rect.Left = 0;

      BMP->Width = rect.Right;
      BMP->Height= rect.Bottom;
      BMP->Canvas->CopyRect(rect, ScreenCanvas, ScreenCanvas->ClipRect);

      BMP->SaveToFile("c:\\zrzut.bmp");

      delete ScreenCanvas;
      delete BMP;
      ReleaseDC(BCBHandle, dc);
   }
}

Uchwyt do programu ?
Raczej uchwyt okna programu...

0
dzejo napisał(a)

oczywiście program ten musi być widoczny, w przeciwnym razie nie ma co zrzucać:

Właśnie to mi przeszkadza. Program nie może być widoczny, więc kombinowanie z PrintScreen'em odpada!

0

Czlowieku , przeczytaj jeszcze raz .
Widoczne ma być okno które zapisujesz do pliku ,a nie program który to wykonuje .
Print Screen to tylko przykład , bez związku z kodem . [glowa]

0
dzejo napisał(a)

Widoczne ma być okno które zapisujesz do pliku ,a nie program który to wykonuje .

Dokładnie. I ja właśnie tego nie chcę. Okno którego "wizerunek" chcę pobrać jest zminimalizowane, lub też ukryte ( Form->Hide(); ). Sam nie jestem pewien. Dlatego też mówię, że PrintScreen w grę nie wchodzi, żeby nie było wątpliwości.

0

Hym.. trudno zapisać coś co nie istnieje.
Oczywiście to tylko moje zdanie ....

1 użytkowników online, w tym zalogowanych: 0, gości: 1