Można by też spróbować ze zdarzeniem OnIdle aplikacji. Gdy uruchamiany program angażuje na proces na
proces uruchamiania cały czas procesora, to zdarzenie OnIdle nie będzie się wykonywać, gdy program zostanie uruchomiony ruszy również to zdarzenie.
Inna sposób, w chwili uruchamiania program z reguły angażuje więcej czasu procesora niż tuż po uruchomieniu, więc po uruchomieniu procesu możesz sprawdzać procent użycia procesora dla tego programu, gdy spadnie do zera znaczy się, że program został w pełni uruchomiony.
Inny sposób, wykorzystanie funkcji
DWORD WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); ale zamiast wartości INFINITE, określasz czas oczekiwania, czyli to co sam juz zrobiłeś, tylko nie usypiasz aplikacji za pomocą funkcji Sleep, lecz po uruchomieniu czekasz określony czas:
- Kod: Zaznacz cały
if(ShellExecuteEx(&sei))
try
{
WaitForSingleObject(sei.hProcess, 20000);
}
__finally
{
// instrukcje
}