2017-05-05 12 views
0

이 질문은 한 가지 예외를 제외하고는 ShellExecute와 거의 비슷합니다. ShellExecute는 사용하기 쉽기 때문에 이제는 일몰 된 Visual FoxPro를 비롯한 여러 프로그래밍 언어에서 몇 줄만 호출하면됩니다.모든 언어에서 Win32 ShellExecute를 호출 할 때 ShellExecute가 완료 될 때까지 어떻게 프로그램 실행을 멈출 수 있습니까?

대부분의 기존 솔루션은 스레드를 사용하여 작업을 수행하고 프로세스 (일반적인 프로세스 이름 인 경우 신뢰할 수 없음) 또는 ShellExecuteEx (사용하기 훨씬 복잡함)를 찾습니다. 나는 다른 솔루션에 만족하지 못했습니다.

문제는 파일을 압축 해제하는 데 몇 초가 걸리는 작업입니다. 내가 끝났음을 어떻게 알 수 있습니까?

답변

0

해결책은 실행중인 명령 내에서 semaphore을 만드는 것입니다. 이것은 배치 파일을 실행하여 수행하지만이 요구되지 않는 경우, 한 - 라이너를 사용하여 cmd.exe를 함께 처리하는 또 다른 방법이 될 수있다

ShellExecute(0, 'open', 'cmd.exe', '/c 7z.exe e Invoices.zip | find "Everything is Ok" > semaphore.txt', workingDirectory, 1) 

이 한 줄이 파이프에 CMD를 사용하여이 완성을 나타내는 텍스트 줄을 찾는 Find에 7zip을 출력합니다. 물론 오류가 발생하면 실패합니다. 당신은 당신이 (FIND에 배관)을 기다릴 출력이없는 경우

, 당신이 사용할 수있는 &는 thusly 히 에코 : ... 다음 에코 줄 바꿈에, 완료 될 때까지

... & echo > semaphore.txt 

이 기다립니다 semaphore.txt.

결국에는 작업 디렉토리 내에 semaphore.txt 파일이 생깁니다. 이 파일이 나타나는지 확인하면 실행이 완료된 것입니다. 이 파일을 삭제하고 프로그램을 계속 진행하십시오.