none
Не знаю, как скрыть окно от bitblt, не скрывая его визуально. RRS feed

  • Общие обсуждения

  • Доброго времени суток.  Надеюсь, кто-нибуть сможет подсаказать по следующей проблеме:

    С помощью bitblt делается "снимок" экрана(HWND_DESKTOP) и сохраняется в текстуру для последующего использования в OpenGL.
    Естественно, на "снимок" попадает и само окно моей программы, что мне не нужно. А если сместить(SetWindowPos) окно или сделать невидимым(ShowWindow) перед использованием bitblt - получается мерцание. В общем, результат не приемлимый. Я пытаюсь добиться обновления изображения в реальном времени.

    Вопрос знатокам:
    Интересует, возможно-ли сделать смещение\отключение окна не заметным для глаз пользователя? Может быть, в winapi есть лазейка? Или более гибкие пути для копирования изображения с раб. стола?

    26 января 2011 г. 14:52

Все ответы

  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
  • > на "снимок" попадает и само окно моей программы, что мне не нужно

    как вариант можно послать сообщение WM_PRINT/WM_PRINTCLIENT открытым окнам, исключив окно своей программы.
    P.S. http://www.fengyuan.com/article/wmprint.html

     

    13 августа 2011 г. 10:24
  • получить все окна можно с помощью EnumWindows - пример
    отфильтровать видимые и каждому послать событие WM_PRINT
    примерно так:

    [DllImport("user32.dll")]
    static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr hdc, uint drawingOptions);
    ...
    using (Image img = new Bitmap(width, height))
    {
      // получить изображение
      uint flags = 0x04 /*CLIENT*/ | 0x10 /*NONCLIENT*/ | 0x08 /*ERASEBKGND*/;
      using (Graphics g = Graphics.FromImage(img))
        SendMessage(hwnd, 0x317 /*WM_PRINT*/, g.GetHdc(), flags);
      ... 
    
    

    hwnd - это дескриптор окна, полученный в EnumWindows; width, height - размеры окна.; см. GetWindowRect

    17 августа 2011 г. 14:03