Печать в PDF приводит к зависанию моего основного приложения при вызове WaitForSingleObject

У нас есть это приложение, которое использует mshtml.dll & rundll.32.exe для печати определенных данных. В Windows 10, если я выбираю «Microsoft Print to PDF» или «Microsoft XPS Document Writer» в качестве принтера, мое приложение зависает. Когда я заканчиваю задачу через диспетчер задач, только тогда открывается диалоговое окно «Сохранить вывод на печать как». В реальном принтере проблем нет.

Вот фрагмент кода для этого.

parameter.Format(_T("%s\\mshtml.dll,PrintHTML \"%s\""), systemPath, strHtmlFileName);

SHELLEXECUTEINFO shPrintInfo = {0};
shPrintInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shPrintInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shPrintInfo.hwnd = hWnd;
shPrintInfo.lpVerb = NULL;
shPrintInfo.lpFile = _T("rundll32.exe");
shPrintInfo.lpParameters = parameter;
shPrintInfo.lpDirectory = NULL;
shPrintInfo.nShow = SW_NORMAL;
shPrintInfo.hInstApp = NULL;

ShellExecuteEx(&shPrintInfo);

if (shPrintInfo.hProcess != NULL)
{
::WaitForSingleObject(shPrintInfo.hProcess, INFINITE);
::CloseHandle(shPrintInfo.hProcess);
}

Я выделил код, в котором висит приложение, и он находится в вызове WaitForSingleObject (). Он никогда не заканчивается и блокирует появление диалогового окна «Сохранить вывод на печать как». Если я изменю INFINITE, скажем, на 10000 (10 секунд), появится диалоговое окно «Сохранить вывод на печать как», но если я протестирую распечатку на реальном принтере и пережду 10 секунд, данные не будут напечатаны, так как дескриптор или процесс были закрыты с помощью вызова CloseHandle ().

Надеюсь, вы могли бы помочь мне.

Глядя на MsgWaitForMultipleObjectsEx в соответствии с предложением Джонатана Поттера, я нашел решение, следуя этой теме
Понимание MsgWaitForMultipleObjects

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]