Добрый день!
Проблема следующая: есть hWnd окна чужого процесса (фотошопа), хочу сохранить его содержимое в bmp файл. Как бы это сделать? Что-то типа GetDC(hWnd) ... А дальше ?
Ничего не получается и я тут плачу
Здравствуйте, Juli, Вы писали:
J>Добрый день!
J>Проблема следующая: есть hWnd окна чужого процесса (фотошопа), хочу сохранить его содержимое в bmp файл. Как бы это сделать? Что-то типа GetDC(hWnd) ... А дальше ?
J>Ничего не получается и я тут плачу
Ну как.
HDC hDC = GetDC(hWNd);
BITMAP bm;
GetObject(HBITMAP,sizeof(bm),&bm);
Получаем содержимое окна в формате bmp. Осталось скинуть в файл. Для этого нужно
1. Заполнить структуру BITMAPFILEHEADER и скинуть в файл.
2. Заполнить структуру BITMAPINFOHEADER и скинуть в файл.
3. Скинуть в файл битовый образ.
Здравствуйте, Juli, Вы писали:
J>Добрый день!
J>Проблема следующая: есть hWnd окна чужого процесса (фотошопа), хочу сохранить его содержимое в bmp файл. Как бы это сделать? Что-то типа GetDC(hWnd) ... А дальше ?
J>Ничего не получается и я тут плачу
Можете использовать вот это как тулзу:
http://www.geocities.com/xmemor/2lz/doublesnapfrompoint.zip (8 kb),
а можете и посмотреть исходник (там же).
Здравствуйте, Juli, Вы писали:
J>Добрый день!
J>Проблема следующая: есть hWnd окна чужого процесса (фотошопа), хочу сохранить его содержимое в bmp файл. Как бы это сделать? Что-то типа GetDC(hWnd) ... А дальше ?
J>Ничего не получается и я тут плачу
Весьма грустно вам будет. Т.к. блиттинг работает не совсем так как ожидается. К примеру Overlapped области он не будет корректно копировать. Т.е. фактически в BMP получится только то, что видно на экране.
Можно попробовать WM_PRINT , либо PrintWindow (winxp+), но по-моему это будет работать только для текущего процесса.
Можно попробовать с помощью внедрения в чужой процесс : SetWindowHook(Message) SendMessage фотошопу, и Dllка, которая хук обрабатывает из контекста процесса фотошопа сделает PrintWindow.