Pobieranie screena dowolnego okna

0

Witam!

Moja aplikacja musi pobrać screenschoots danego okna oraz posiadać jego dane, tz. współrzędne.

Prościej mówiąc, mam jakiś program otwarty na pulpicie i chce by wygląd tego okna był wstawiony no np. do TImage,

Na początku myślałem by użyć jakoś funkcji THandle i pobrać współrzędne okna oraz jego rozmiar a następnie w jakiś sposób ograniczyć "pole widzenia" i pokombinować z tym:

var
  Can: TCanvas;
  B: TBitmap;
begin
  try
    Can := TCanvas.Create;
    Can.Handle := GetWindowDC(GetDesktopWindow);

    Image1.Canvas.Create; 
    Image1.Width := Screen.Width;
    Image1.Height := Screen.Height;
    Image1.Canvas.CopyRect(Rect(0, 0, Screen.Width, Screen.Height), Can, Rect(0, 0, Screen.Width, Screen.Height));

  finally
    Can.Free;
    //B.Free;
  end;

ale nie bardzo wiem jak się za to zabrać.

Problem pojawia się dlatego iż znam jedynie nazwę aplikacji (nazwę pliku exe), bądź jej "tytuł", wyświetlany na pasku zadań.

I w jaki spoób otrzymać dane takie jak:

  • współrzędne okna (położenie na ekranie)
  • wymiary

da się przez THandle? znając nazwę pliku exe, bądź po prostu nazwę wyświetlaną na pasku zadań (pobrać uchwyt do aplikacji)

Proszę o ewentualną pomoc za którą serdecznie dziękuje!

P.S.

to może się przydać :-/

var
  H : THandle;
begin
  H := FindWindow(nil, 'tutaj wstawiamy nazwe okna);
  SetWindowPos(H, HWND_TOP, 0, 100, 200, 200,SWP_SHOWWINDOW);
0
modrih napisał(a)

Problem pojawia się dlatego iż znam jedynie nazwę aplikacji (nazwę pliku exe), bądź jej "tytuł", wyświetlany na pasku zadań.

Z takim 'czymś' już się spotkałem na tym forum... więc trzeba by poszukać.. :P

modrih napisał(a)

I w jaki spoób otrzymać dane takie jak:

  • współrzędne okna (położenie na ekranie)
  • wymiary
ms-help://borland.bds4/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/getwindowinfo.htm napisał(a)

The GetWindowInfo function retrieves information about the specified window.

[...]

Parameters
hwnd
[in] Handle to the window whose information is to be retrieved.
pwi
[out] Pointer to a WINDOWINFO structure to receive the information. Note that you must set WINDOWINFO.cbSize to sizeof(WINDOWINFO) before calling this function.

[...]

typedef struct {
DWORD cbSize;
RECT rcWindow; // Pointer to a RECT structure that specifies the coordinates of the window.
RECT rcClient; // Pointer to a RECT structure that specifies the coordinates of the client area.
DWORD dwStyle;
DWORD dwExStyle;
DWORD dwWindowStatus;
UINT cxWindowBorders;
UINT cyWindowBorders;
ATOM atomWindowType;
WORD wCreatorVersion;
} WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;

Może pomoże ;P

modrih napisał(a)

da się przez THandle? znając nazwę pliku exe, bądź po prostu nazwę wyświetlaną na pasku zadań (pobrać uchwyt do aplikacji)

Da się przez HWND (THandle), da się znając "caption" okna... wierzę też, że da się znając nazwę/ścieżkę pliku.. w końcu czego się nie da zrobić w Delphi? ^^

modrih napisał(a)

Proszę o ewentualną pomoc za którą serdecznie dziękuje!

no problemo ;p

0

Po zastanowieniu (czyt. sprawdzeniu helpa dokładniej)... jednak GetWindowRect będzie lepsze...

ps.: kto nie lubi nowej wersji helpa delphi rączka w górę! ^^

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