как захватить рабочий стол с помощью vc ++ - PullRequest
2 голосов
/ 10 ноября 2010

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

void CSDITESTView::OnFileTest()
{
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);

HWND hDesktopWnd = GetDesktopWindow()->m_hWnd;

HDC hDesktopDC = ::GetDC(hDesktopWnd);
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC,nScreenWidth, nScreenHeight);
SelectObject(hCaptureDC,hCaptureBitmap); 
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight, hDesktopDC,0,0,SRCCOPY|CAPTUREBLT); 
::ReleaseDC(hDesktopWnd,hDesktopDC);
DeleteDC(hCaptureDC);
}

Но мне нужен код, который быстро захватывает и сохраняет его как изображение.

Заранее спасибо ..

1 Ответ

0 голосов
/ 29 июля 2011

Я протестировал ваш код, используя функции счетчика производительности, как показано ниже:

void CMainFrame::OnTestTest()
{
   LARGE_INTEGER lFreq, lStart, lEnd;
   ::QueryPerformanceFrequency(&lFreq);
   ::QueryPerformanceCounter(&lStart);

   /// BEGIN BENCHMARK ///
   int nScreenWidth = ::GetSystemMetrics(SM_CXSCREEN);
   int nScreenHeight = ::GetSystemMetrics(SM_CYSCREEN);

   HWND hDesktopWnd = ::GetDesktopWindow();

   HDC hDesktopDC = ::GetDC(hDesktopWnd);
   HDC hCaptureDC = ::CreateCompatibleDC(hDesktopDC);
   HBITMAP hCaptureBitmap = ::CreateCompatibleBitmap(hDesktopDC,nScreenWidth, nScreenHeight);
   ::SelectObject(hCaptureDC,hCaptureBitmap); 
   ::BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight, hDesktopDC,0,0,SRCCOPY|CAPTUREBLT); 
   ::ReleaseDC(hDesktopWnd,hDesktopDC);
   ::DeleteDC(hCaptureDC);
   /// END BENCHMARK ///

   ::QueryPerformanceCounter(&lEnd);
   double dTime = ((double)lEnd.QuadPart - lStart.QuadPart) / lFreq.QuadPart;
   // ..
}

Полученное время составило около 80 микросекунд . Я не думаю, что ваш компьютер невероятно медленный. Возможно, проблема в другой стороне (например, в вопросе синхронизации потоков).

...