Horane Jo Ответов: 1

Почему 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;


Я так благодарна, если кто-то мне помогает. :-)

1 Ответов

Рейтинг:
1

Member 14113501

dmf_esc_usm_pipe_map не подходит,измените его на 1030 означает map;1031 означает umap...