ventana vago saki rincon resumen protagonistas personajes nudo inicio desenlace descripcion analisis abierta c++ process window handle

c++ - vago - la ventana abierta saki audio



Cómo obtener hWnd de la ventana abierta por ShellExecuteEx.. hProcess? (1)

Este tema "simple" parece estar plagado de problemas.
p.ej. ¿El nuevo proceso abre múltiples ventanas? ¿Tiene una pantalla de bienvenida?
¿Hay una manera simple? (Estoy comenzando una nueva instancia de Notepad ++)

... std::tstring tstrNotepad_exe = tstrProgramFiles + _T("//Notepad++//notepad++.exe"); SHELLEXECUTEINFO SEI={0}; sei.cbSize = sizeof(SHELLEXECUTEINFO); sei.fMask = SEE_MASK_NOCLOSEPROCESS; sei.hwnd = hWndMe; // This app''s window handle sei.lpVerb = _T("open"); sei.lpFile = tstrNotepad_exe.c_str(); sei.lpParameters = _T(" -multiInst -noPlugins -nosession -notabbar "; sei.lpDirectory = NULL; sei.nShow = SW_SHOW; sei.hInstApp = NULL; if( ShellExecuteEx(&sei) ) { // I have sei.hProcess, but how best to utilize it from here? } ...


Primero use WaitForInputIdle para pausar su programa hasta que la aplicación haya comenzado y esté esperando la entrada del usuario (la ventana principal debería haberse creado para entonces), luego use EnumWindows y GetWindowThreadProcessId para determinar qué ventanas del sistema pertenecen al proceso creado.

Por ejemplo:

struct ProcessWindowsInfo { DWORD ProcessID; std::vector<HWND> Windows; ProcessWindowsInfo( DWORD const AProcessID ) : ProcessID( AProcessID ) { } }; BOOL __stdcall EnumProcessWindowsProc( HWND hwnd, LPARAM lParam ) { ProcessWindowsInfo *Info = reinterpret_cast<ProcessWindowsInfo*>( lParam ); DWORD WindowProcessID; GetWindowThreadProcessId( hwnd, &WindowProcessID ); if( WindowProcessID == Info->ProcessID ) Info->Windows.push_back( hwnd ); return true; } .... if( ShellExecuteEx(&sei) ) { WaitForInputIdle( sei.hProcess, INFINITE ); ProcessWindowsInfo Info( GetProcessId( sei.hProcess ) ); EnumWindows( (WNDENUMPROC)EnumProcessWindowsProc, reinterpret_cast<LPARAM>( &Info ) ); // Use Info.Windows..... }