Ver Mensaje Individual
  #20  
Antiguo 26-03-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Es relativamente sencillo. La realidad es que el cursor ya cambia a IDC_APPSTARTING, pero podemos poner el que queramos.

Código:
DWORD WINAPI WaitForInputIdle(
  __in  HANDLE hProcess,           // Handle del proceso que estamos creando
  __in  DWORD dwMilliseconds     // Milisegundos de espera mínima para esta API
);
La API WaitForInputIdle, espera a que el proceso hProcess que estamos creando este completado o el tiempo establecido. Realmente la API se da por concluida cuando el proceso creado está en condiciones de esperar una respuesta por parte del usuario. Esto significa que no nos sirve para procesos de consola o sin cola de mensajes.

Un ejemplo práctico siguiendo el código expuesto en el hilo:

Código:
   PROCESS_INFORMATION piProcInfo;
   STARTUPINFOW siStartInfo;

   // Set up members of STARTUPINFO structure.
   ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
   siStartInfo.cb = sizeof(STARTUPINFO);

   HRESULT hRes = CreateProcessWithLogonW(
     Usuario,
     Dominio,
     Password,
     LOGON_WITH_PROFILE,
     NULL,
     App,  // application name
     NULL, // creation flags
     NULL, // use parent's environment
     L"C:\\", // use parent's current directory
     &siStartInfo, // STARTUPINFO pointer
     &piProcInfo   // recive PROCESS_INFORMATION   CreateProcessWithLogonW();
   );

   // Cambiamos el cursor a un rejoj de arena....
   ::SetCursor(LoadCursor(0, IDC_WAIT));
   // Esperamos hasta que termine de crearse el nuevo proceso
   WaitForInputIdle(piProcInfo.hProcess, INFINITE);
   // Recuperamos el cursor estandar.
   ::SetCursor(LoadCursor(0, IDC_ARROW));

   if(hRes){
     CloseHandle(piProcInfo.hProcess);
     CloseHandle(piProcInfo.hThread);
   }
Saludos.
Responder Con Cita