W programie wykorzystuję zewnętrzny moduł EXE o nazwie pdftopng w celu przekonwertowania pliku PDF do PNG. Moduł uruchamiam z wykorzystaniem ShellExecute
i rozpoczyna się generowanie PNG. Plik źródłowy jest dość duży (mapa) więc zapis do PNG chwilę trwa (jakieś 2-3 sekundy). Potem muszę zamienić PNG na BMP i wyświetlić do w programie. Fragment kodu wygląda następująco:
ShellExecute(Handle,'open',PChar(Directory+'\Source\PDF\pdftopng.exe'),PChar('Plik.pdf Plik.png'), nil, SW_HIDE);
Convert_PNG_To_BMP(Plik.png, Plik.bmp) //moja procedura;
Pomiędzy ShellExecute
a Convert_PNG_To_BMP
muszę wstawić procedurę, która sprawdzi, czy uruchomiony moduł zewnętrzny zakończył już zapis do pliku PNG. FileExists
odpada bo plik tworzony jest na samym początku zapisu i utworzenie pliku nie oznacza ukończenia zapisu.
Próbowałem także zastosowania IsFileInUse, ale procedura dotyczy aplikacji exe, a nie pliku z danymi.
Proszę o pomoc jak sprawdzić, czy plik PNG jest używany przez pdftopng.exe, gdyż dopiero po zwolnieniu pliku mogę wywołać kolejną procedurę zapisu PNG do BMP. W przeciwnym wypadku program zgłasza błąd, że plik PNG jest używany przez inny proces (konkretnie pdftopng.exe).