Получить эскиз фонового окна - PullRequest
2 голосов
/ 17 апреля 2009

Я пытаюсь получить уменьшенные изображения окон, которые не видны.

Вот код, который у меня пока есть

BOOL CALLBACK WindowProc(HWND hWnd, LPARAM lParam)
{
    RECT WindRect;
    GetWindowRect(hWnd, &WindRect)
    CurrentScreenShot->Next = new ScreenShotList();
    CurrentScreenShot = CurrentScreenShot->Next;

    HDC SourceDC = GetDC(hWnd);
    HDC TargetDC = CreateCompatibleDC(SourceDC);
    CurrentScreenShot->ScreenShot = CreateCompatibleBitmap(SourceDC, WindRect.right - WindRect.left, WindRect.bottom - WindRect.top);

    BitBlt(TargetDC, 0, 0, WindRect.right - WindRect.left, WindRect.bottom - WindRect.top, SourceDC, 0, 0, SRCCOPY);

    ReleaseDC(hWnd, SourceDC);

    g_iWindows++;
    return TRUE;
}

На данный момент WindowProc вызывается напрямую, используя FindWindow, чтобы получить дескриптор, хотя, в конце концов, я хочу использовать EnumWindows, чтобы перебрать все окна, чтобы получить их эскизы и сохранить их в связанном списке. .

WindowProc(FindWindow(NULL, L"File Explorer"), 0);

Этот код находится в DLL, которая вызывается из приложения C # Forms. На данный момент приложение C # просто берет растровое изображение и сохраняет его в файл.

Проблема в том, что если я не использую FindWindow, чтобы получить видимое окно (которое также является приложением C #), изображение в конечном итоге становится черным ящиком.

Можно ли получить изображение фонового окна?

РЕДАКТИРОВАТЬ : Это приложение для Windows Mobile

1 Ответ

0 голосов
/ 18 апреля 2009

Для невидимых Windows перерисовки не происходит, поэтому вы не можете получить их содержимое от DC. Попробуйте отправить сообщение WM_PRINT в целевое окно, чтобы запросить, чтобы оно перенаправило свой контент на ваш DC.

Edit:

Извините, я не заметил, что это было для Windows Mobile. Кроме WM_PRINT, я не знаю, как получить содержимое невидимого окна. Конечно, вы все равно можете показать окно (и убедиться, что оно сверху / не закрыто другими окнами) и затем запустить код, который у вас есть, но это, вероятно, немного грязно.

...