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?
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...
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!
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]
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.
Hym.. trudno zapisać coś co nie istnieje.
Oczywiście to tylko moje zdanie ....