Ĺadny brzuch
Cześć.
Czy jest jakaś możliwość przechwycenia obrazu okna z innej aplikacji? Dokładnie chodzi mi o to że mam jakiś program zminimalizowany(najlepiej - ale nie koniecznie) i chcę zrobić jego zrzut i wyświetlić w innym oknie lub zapisać do pliku.
Macie jakiś "trop" jak to zrobić? Opis / keywords pod winkiem w c++ juz troche pisalem glownie mniejsze rzeczy ale pewne doswiadczenie mam.
e, troche nierozumiem, chodzi ci o normalnego PrintScreena?
Jeśli znasz napis na belce okna, to wystarczy FindWindow() + zrzut ekranu ze znalezionego uchwytu ;)
Jeśli znasz napis na belce okna, to wystarczy FindWindow() + zrzut ekranu ze znalezionego uchwytu ;)
Wlasnie sprawdzilem w delphi przez skopiowanie z tcanvas kotrego handle bylo ustawione przez getwindowdc i gdy program jest zminimalizowany nic sie nie kopiuje. Chyba ze chodzilo o inna metode...
Zastanawiam sie czy jest to w ogole mozliwe - czy windows<vista udostepnia taka mozliwosc...
wlasnie windows vista umozliwia to w prosty sposob :) a co do poprzednich, to ewentualnie mozna by odminimalizowac te okno, zrobic screena, wyciac odpowiedni fragment i okno z powrotem zminimalizowac - user nie powinien tego nawet zauwazyc :P zdobyc okno zminimalizowanego programu w poprawny sposob da sie na pewno, ale nie wiem jak niestety
W zasadzie myslalem nad robieniem screena ale wydaje mi się to mało wydajne :/ no cóż trzeba sprawdzić :]
A wiecie może jak zrobić wirtualny ekran tak jakbym na przykład podłączył rzutnik :]??
ostatnio trafilem na metode TWinControl.PaintTo -> dosyc ciekawa, zwlaszcza jej tresc ;)
generalnie okazuje sie ze wyslanie WM_PAINT z podaniem HDC na ktorym ma byc rysowane skutkuje ... no wlasnie, rysuje na podanym HDC :)
jedyny problem ze trzeba wyslac wiadomosc do wszystkich child'ow ;)
Dzieki wielkie. Jednak mam pewien problem ;-) BTW mógłbyś sprecyzować o jaką technologię chodzi ?
0. Co to jest HDC ?
1.
LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // WM_PAINT WPARAM wParam, // not used LPARAM lParam // not used ); Jak tu podać HDC ??
2. TWinControl.PaintTo Niestety nie trafilem na to - troche poszukalem ale nic konkretniejszego nie moge znalezc
Migajek pisze o przechwyceniu uchwytu okna i wyslaniu mu komunikatu rysowania z oknem przeznaczenia podanym przez nas (canvas.handle ?) co powinno wywolac rysowanie. Tylko trzeba wyslac do wszystkich podrzednych okienek (button, panel...) tez ten komunikat, bo sie automatycznie nie przemaluja. Nie wiem czy dziala ale przetlumaczylem na prostrzy jezyk to co ladnie napisal migajek :).
A co do 1. prawdopodobnie w lparam lub wparam ;). Komunikaty (przynajmniej w delphi ale podejrzewam ze w c++ tez jest ta funkcja lub podobna) wysylame przez SendMessage. // edit: nie zwrocilem uwagi na opis
The HDC type is a Handle to a Device Context.
// edit2: teoretycznie bedzie Cie interesowalo WM_PRINT lub cos z tej rodziny. W praktyce nie bardzo mi sie sprawdza w odniesieniu do innych okien.
Użytkownik Ali240 edytował ten post 10 marzec 2007, 15:18
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Czy jest jakaś możliwość przechwycenia obrazu okna z innej aplikacji? Dokładnie chodzi mi o to że mam jakiś program zminimalizowany(najlepiej - ale nie koniecznie) i chcę zrobić jego zrzut i wyświetlić w innym oknie lub zapisać do pliku.
Macie jakiś "trop" jak to zrobić? Opis / keywords pod winkiem w c++ juz troche pisalem glownie mniejsze rzeczy ale pewne doswiadczenie mam.
e, troche nierozumiem, chodzi ci o normalnego PrintScreena?
Jeśli znasz napis na belce okna, to wystarczy FindWindow() + zrzut ekranu ze znalezionego uchwytu ;)
Jeśli znasz napis na belce okna, to wystarczy FindWindow() + zrzut ekranu ze znalezionego uchwytu ;)
Wlasnie sprawdzilem w delphi przez skopiowanie z tcanvas kotrego handle bylo ustawione przez getwindowdc i gdy program jest zminimalizowany nic sie nie kopiuje. Chyba ze chodzilo o inna metode...
Zastanawiam sie czy jest to w ogole mozliwe - czy windows<vista udostepnia taka mozliwosc...
wlasnie windows vista umozliwia to w prosty sposob :) a co do poprzednich, to ewentualnie mozna by odminimalizowac te okno, zrobic screena, wyciac odpowiedni fragment i okno z powrotem zminimalizowac - user nie powinien tego nawet zauwazyc :P zdobyc okno zminimalizowanego programu w poprawny sposob da sie na pewno, ale nie wiem jak niestety
W zasadzie myslalem nad robieniem screena ale wydaje mi się to mało wydajne :/ no cóż trzeba sprawdzić :]
A wiecie może jak zrobić wirtualny ekran tak jakbym na przykład podłączył rzutnik :]??
ostatnio trafilem na metode TWinControl.PaintTo -> dosyc ciekawa, zwlaszcza jej tresc ;)
generalnie okazuje sie ze wyslanie WM_PAINT z podaniem HDC na ktorym ma byc rysowane skutkuje ... no wlasnie, rysuje na podanym HDC :)
jedyny problem ze trzeba wyslac wiadomosc do wszystkich child'ow ;)
Dzieki wielkie. Jednak mam pewien problem ;-) BTW mógłbyś sprecyzować o jaką technologię chodzi ?
0. Co to jest HDC ?
1.
LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // WM_PAINT WPARAM wParam, // not used LPARAM lParam // not used ); Jak tu podać HDC ??
2. TWinControl.PaintTo Niestety nie trafilem na to - troche poszukalem ale nic konkretniejszego nie moge znalezc
Migajek pisze o przechwyceniu uchwytu okna i wyslaniu mu komunikatu rysowania z oknem przeznaczenia podanym przez nas (canvas.handle ?) co powinno wywolac rysowanie. Tylko trzeba wyslac do wszystkich podrzednych okienek (button, panel...) tez ten komunikat, bo sie automatycznie nie przemaluja. Nie wiem czy dziala ale przetlumaczylem na prostrzy jezyk to co ladnie napisal migajek :).
A co do 1. prawdopodobnie w lparam lub wparam ;). Komunikaty (przynajmniej w delphi ale podejrzewam ze w c++ tez jest ta funkcja lub podobna) wysylame przez SendMessage. // edit: nie zwrocilem uwagi na opis
The HDC type is a Handle to a Device Context.
// edit2: teoretycznie bedzie Cie interesowalo WM_PRINT lub cos z tej rodziny. W praktyce nie bardzo mi sie sprawdza w odniesieniu do innych okien.
Użytkownik Ali240 edytował ten post 10 marzec 2007, 15:18