
int WINAPI ejecutar(char *szDesktopName, char *szPath)
{
HDESK hOriginalThread;
HDESK hOriginalInput;
HDESK hNewDesktop;
hOriginalThread = GetThreadDesktop(GetCurrentThreadId());
hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);
hNewDesktop = CreateDesktop(szDesktopName, NULL, NULL, 0, GENERIC_ALL, NULL);
SetThreadDesktop(hNewDesktop);
SwitchDesktop(hNewDesktop);
//aca en este punto enviamos nuestro proceso dentro del escritorio virtual previamente creado, este proceso por ejemplo puede ser ejecutar una instancia de Internet explorer y pasarle parametro URL para abrirla dentro de ese escritorio:
incrustarElProceso(szDesktopName, szPath);
SwitchDesktop(hOriginalInput);
SetThreadDesktop(hOriginalThread);
CloseDesktop(hNewDesktop);
return 0;
}
Y la función complementaria al proceso quedaria:
BOOL incrustarElProceso(char *nombreEscritorio, char *szPath)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
// Zero these structs
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.lpTitle = nombreEscritorio;
si.lpDesktop = nombreEscritorio;
ZeroMemory(&pi, sizeof(pi));
// Start the child process
if (!CreateProcess(NULL, // No module name (use command line).
szPath, // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi)) // Pointer to PROCESS_INFORMATION structure.
{
return FALSE;
}
// Wait until process exits
WaitForSingleObject(pi.hProcess, INFINITE);
// Close process and thread handles
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return TRUE;
}
podeis usar el visual C++ o el Visual Studio para crearte una pequeña app con un boton de iniciar para arrancar la funcion ejecutar, de ahi ya metido en el escritorio virtual pues nada quedas encerrado y te toca salir a la fuerza con el boton de apagado, pero ando tratando de escribir un hook que detecte la tecla esc o alguna tecla de funcion para obligar la terminacion del proceso

esto es codigo libre y pueden ver un demo funcionando aca:http://www.codeproject.com/Articles/7392/Lock-Windows-Desktop?msg=3139662#xx3139662xx