我正在设置一个临时桌面以“静音模式”运行另一个应用程序 - 另一个应用程序很嘈杂,并在处理过程中抛出各种各样的窗口。
我在这里使用了信息: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);
}
如果重要,请致电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消息不在桌面之间传递?或者是否有人对如何进一步解决这个问题有任何建议?
答案 0 :(得分:4)
答案 1 :(得分:1)