我正在設置一個臨時桌面以「靜音模式」運行另一個應用程序 - 另一個應用程序很嘈雜,並在處理時引發各種窗口。CreateDesktop和DDE
我用這裏的信息:CreateDesktop() with vista and UAC on (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);
}
如果它的事項,調用DDE初始化:
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消息沒有在桌面之間傳遞?或者有沒有人有任何建議如何進一步排除故障?
我很榮幸 - 多年來一直在閱讀您的博客。我將把控制過程移到同一個桌面 - 謝謝! – 2012-02-03 17:24:44