Почему ExtEscape всегда возвращает 0 при использовании драйвера DFMirage?
Я создаю программное обеспечение, которое может захватить экран эффективно, я пробовала постоянного тока(передача битового блока), в D3D(GetFrontBuffer), но каждый из них будет стоить мне больше, чем 40МС, чтобы захватить полный экран(1680*1050, он может оказаться более высоким разрешением, я думаю). Поэтому я хотел использовать технологию зеркального драйвера, которая была рекомендованным способом захвата экрана Microsoft в Windows 7.
Я установил DFMirage для TightVNC версии 2.0.105.0, потому что я не могу установить файлы драйверов в dfmirage-sdk-1.2.74.0.zip(я думал, что функция ExtEscape будет корректно работать с этой версией драйверов, но я перепробовал все известные мне методы ее установки, но потерпел неудачу).
Был даже файл .cpp установщика драйверов. Я тоже пробовал, но ничего не вышло.
А файл МКС я не смог построить. setup.exe, там были допущены ошибки. А может быть, и больше.
params := Format4('-i "%s" "%s" "%s" "%s"', HW_ID, HW_DESCR, workingDir, ExpandConstant('{tmp}\' + DFMIRAGE_INF));
"Формат-4" не мог быть распознан.
Я написал небольшое приложение MFC для тестирования функции ExtEscape, представленной в SDK.doc с самого начала dfmirage-sdk-1.2.74.0.zip, но он вернул 0, что означало неудачу.
HDC m_hdc = NULL; m_hdc = CreateDC(_T("DISPLAY"), 0, 0, 0); if (m_hdc == NULL) { DWORD dwError = GetLastError(); TRACE(_T("CreateDC failed, Error code = %d\r\n"), dwError); return; } GETCHANGESBUF changeBuf = { 0 }; INT nOutSize = sizeof(GETCHANGESBUF); INT nRtn = ExtEscape(m_hdc, dmf_esc_usm_pipe_map, 0, NULL, nOutSize, (LPSTR)(&changeBuf)); if (nRtn <= 0) { CString str; str.Format(_T("ExtEscape failed, returns %d\r\n"), nRtn); MessageBox(str); } else { CString str; str.Format(_T("OK, 0x%08X, 0x%08X"), changeBuf.buffer, changeBuf.Userbuffer); MessageBox(str); } DeleteDC(m_hdc); return;
Я так благодарна, если кто-то мне помогает. :-)