2011-01-05 2 views
0

У меня возникла эта проблема. Мой ShellExecute работает отлично, выход представляет собой файл изображения PNG. Проблема заключается в том, что этот процесс занимает некоторое время (секунды) для создаваемого файла. Между тем, мой result здесь уже выполнен, но он выдает сообщение об ошибке, потому что PNG-файл от ShellExecute еще не существует. Как убедиться, что файл существует первым, а затем после этого может выполнить result.Как выполнить код после создания файла?

ShellExecute(0,       
       _T("open"),    
       _T("c:\\convert.exe"), 
       full,     
       0,      
       SW_HIDE); 

    result = ExecuteExternalProgramCompare(L"c.png", L"t.png"); // this line always gives error because the file c.png is not produce yet by shellexecute above. 

обновление: Моя попытка преобразовать в ShellExecuteEx.

SHELLEXECUTEINFO info = {0}; 

info.cbSize = sizeof(SHELLEXECUTEINFO); 
info.fMask = SEE_MASK_NOCLOSEPROCESS; 
info.lpFile = _T("c:\\convert.exe"); 
info.lpParameters = full; 
info.nShow = SW_HIDE; 

ответ

1

Вы должны использовать ShellExecuteEx. Это позволит вам получить дескриптор вызываемого процесса, чтобы вы могли дождаться завершения процесса.

SHELLEXECUTEINFO info = {0}; 

info.cbSize = sizeof(SHELLEXECUTEINFO); 
info.fMask = SEE_MASK_NOCLOSEPROCESS; 
info.lpVerb = _T("open"); 
info.lpFile = _T("c:\\convert.exe"); 
info.lpParameters = full; 
info.lpDirectory = NULL; 
info.nShow = SW_HIDE; 

if (ShellExecuteEx (&info)) 
{ 
    WaitForSingleObject (info.hProcess, INFINITE); 
} 
+0

Как преобразовать мои параметры в shellexecute к этому? Кажется, у вас есть другая структура для передачи значений? – karikari

Смежные вопросы