"침묵 모드"에서 다른 응용 프로그램을 실행하기 위해 스크래치 데스크톱을 설정 중입니다. 다른 응용 프로그램은 시끄럽고 처리하는 동안 모든 종류의 창을 던집니다. 내가하려고 할 때 -하지만 내가 다른 바탕 화면을 만들 수 있습니다, 나는 (내가이 작업 관리자에 실행 참조) 다른 바탕 화면에 응용 프로그램을 시작할 수 있습니다 - CreateDesktop() with vista and UAC on (C, windows)CreateDesktop 및 DDE
및 CreateDesktop 작동 : 나는 여기에 정보를 사용했다
DDE를 통해 응용 프로그램과 상호 작용하려면 DdeConnect 호출이 시간 초과 될 때까지 중단됩니다.
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 호출 : 여기
LPSTR desktopName = "MYDESKTOPNAME";
HDESK hDesk = CreateDesktop(desktopName , NULL, NULL, 0, DESKTOP_SWITCHDESKTOP|
DESKTOP_WRITEOBJECTS|
DESKTOP_READOBJECTS|
DESKTOP_ENUMERATE|
DESKTOP_CREATEWINDOW|
DESKTOP_CREATEMENU, NULL);
실제로 새로운 바탕 화면에 응용 프로그램을 실행하는 CreateProcess를 수 있습니다 :
그리고 여기에 내가 CreateDesktop를 호출하고있어 방법
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 메시지가 데스크톱간에 전달되지 않는 것입니까? 아니면이 문제를 해결하는 방법에 대한 제안이있는 사람이 있습니까?
는
저는 수년간 블로그를 읽은 것을 영광으로 생각합니다. 제어 프로세스를 같은 데스크탑으로 옮길 것입니다 - 감사합니다! –