Я настраиваю рабочий стол с нуля для запуска другого приложения в «тихом режиме» - другое приложение шумит и выбрасывает всевозможные окна во время обработки.
Я использовал информацию здесь: CreateDesktop () с Vista и UAC на (C, Windows)
и CreateDesktop работает - я могу создать другой рабочий стол, я могу запустить приложение на другом рабочем столе (я вижу, что он запускается в диспетчере задач) - но когда я пытаюсь взаимодействовать с приложением через DDE, вызов DdeConnect зависает до время истекло.
А вот как я называю CreateDesktop:
LPSTR desktopName = "MYDESKTOPNAME";
HDESK hDesk = CreateDesktop(desktopName , NULL, NULL, 0, DESKTOP_SWITCHDESKTOP|
DESKTOP_WRITEOBJECTS|
DESKTOP_READOBJECTS|
DESKTOP_ENUMERATE|
DESKTOP_CREATEWINDOW|
DESKTOP_CREATEMENU, NULL);
Вот CreateProcess для фактического запуска приложения на новом рабочем столе:
STARTUPINFO startupInfo;
GetStartupInfo(&startupInfo);
startupInfo.lpDesktop = desktopName;
PROCESS_INFORMATION procInfo;
memset(&procInfo, 0, sizeof(procInfo));
if (CreateProcess(NULL, exePath, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &startupInfo, &procInfo)){
WaitForInputIdle(procInfo.hProcess, INFINITE);
CloseHandle(procInfo.hProcess);
CloseHandle(procInfo.hThread);
}
Если это имеет значение, вызов DdeInitialize:
DWORD afCmd = APPCLASS_STANDARD | APPCMD_CLIENTONLY | CBF_SKIP_ALLNOTIFICATIONS;
UINT rslt = ::DdeInitialize(&ddeInst, NULL, afCmd, 0);
Вот вызов DdeConnect (параметры hsz * и т. Д. Все в порядке - если я запускаю приложение на обычном рабочем столе, все вызовы работают отлично).
hConv = ::DdeConnect(ddeInst,
hszService,
hszTopic,
NULL);
Этот звонок просто висит на ~ 60 секунд.
Это какая-то проблема безопасности? то есть сообщения Windows не проходят между рабочими столами? Или у кого-нибудь есть предложения по дальнейшему устранению неполадок?