W jaki sposób napisać warunek, własciwie jak będzie wyglądać warunek , Jeżeli moge utworzyć plik, Kopiuje Go , Problem wystąpił gdy program nieświadomie kopiuje aplikacje gdy jeszcze nie została zamknieta i crashuje mój program.
while true do
begin
try
//tu wstaw to kopiowanie
break;
except
end;
end;
Możesz napisać dokładniej o co chodzi bo naprawdę ciężko zrozumieć. Masz otwarty jakiś program i chcesz go skopiować ale dopiero wtedy jak on skończy swoje działanie?
Jeżeli tak to trzeba zdobyć ID procesu ja to zrobiłam poprzez znalezienie uchwytu głównego okna aplikacji po jego tytule (na przykładzie kalulatora) a póżniej na podstawie uchwytu okna zdobywam ID procesu. Gdy masz ID procesu otwierasz proces i dzięki funkcji WaitForSingleObject czekasz na jego zakończenie:
const
APP_TITLE = 'Kalkulator';
var
hWin, ProcessId, hProcess: Cardinal;
begin
hWin:= FindWindow(nil, APP_TITLE);
if hWin > 0 then
begin
GetWindowThreadProcessId(hWin, @ProcessId);
if ProcessId > 0 then
begin
hProcess:= OpenProcess(SYNCHRONIZE , False, ProcessId);
WaitForSingleObject(hProcess, INFINITE);
//lub jezeli oczekiwanie na zamkniecie ma nie blokowac aplikacji
//zamiast powyższej funkcji WaitForSingleObject zrób:
//while WaitForSingleObject(hProcess, 100) = WAIT_TIMEOUT do
// Application.ProcessMessages;
CloseHandle(hProcess);
end;
end;
ShowMessage('Możesz kopiować'); //tu kopiowanie
end;
Dziękuje za zainteresowanie tematem i za odpowiedzi, w tym przypadku starczył tylko pierwszy kod, wykonuje poprawnie swoje zadanie, po prostu gdy aplikacja nie zdązyła sie zamknąć a program już nadpisywał to crashowało aplikacje, a teraz jest ok, jeżeli nie moze zapisac to po czasie ponawia. Pozdrawiam.