각 동사는 콘솔 창에서 응용 프로그램을 시작하는 데 사용되는 명령에 해당합니다. 열려 있는 동사는 일반적으로 지원되기 때문에 좋은 예입니다. .exe 파일의 경우 열기만 응용 프로그램을 시작합니다. 그러나 특정 파일에서 작동하는 응용 프로그램을 시작하는 데 더 일반적으로 사용됩니다. 예를 들어 Microsoft 워드패드에서 .txt 파일을 열 수 있습니다. 따라서 .txt 파일에 대한 열린 동사는 다음 명령과 일치합니다: 응용 프로그램은 먼저 Windows 디렉터리PIDL을 검색하고 첫 번째 .bmp 파일을 찾을 때까지 내용을 열거합니다. 이전 예제와 달리 IShellFolder:GetDisplayNameOf는 표시 이름 대신 파일의 구문 분석 이름을 검색하는 데 사용됩니다. 이 폴더는 파일 시스템 폴더이므로 구문 분석 이름은 ShellExecuteEx에 필요한 경로입니다. ShellExecute를 사용하면 특정 파일 형식에 등록된 프로그램의 이름이나 위치를 알 필요가 없습니다. Windows는 당신을 위해 그것을 처리합니다. 예를 들어. PDF 파일, 독자, Acrobat 또는 다른 PDF 읽기 응용 프로그램이 설치되어있는 한, 윈도우는 그것을 시작하고 당신을 위해 PDF를로드합니다.

다음 예제에서는 ShellExecuteEx API 함수를 사용합니다. 유형: LPCTSTR 지정된 동사를 실행할 파일 또는 개체를 지정하는 null 종료 된 문자열에 대한 포인터입니다. Shell 네임스페이스 개체를 지정하려면 정규화된 구문 분석 이름을 전달합니다. 모든 동사가 모든 개체에서 지원되는 것은 아닙니다. 예를 들어 모든 문서 형식이 „인쇄“ 동사를 지원하는 것은 아닙니다. 상대 경로가 lpDirectory 매개 변수에 사용되는 경우 lpFile에 대한 상대 경로를 사용하지 마십시오. 이 경우 작업이 실행되는 문자 `url`의 배열입니다. . DLL이 프로세스에 로드되면 로더 잠금이라고 하는 잠금을 얻습니다. DllMain 기능은 항상 로더 잠금 아래에서 실행됩니다.

로더 잠금을 보유하는 동안 ShellExecuteEx를 호출하지 않는 것이 중요합니다. ShellExecuteEx는 확장 가능하기 때문에 로더 잠금이 있는 경우 제대로 작동하지 않는 코드를 로드하여 교착 상태가 되어 응답하지 않는 스레드가 발생할 수 있습니다. 유형: LPCTSTR 작업에 대한 기본(작업) 디렉토리를 지정하는 null 종료된 문자열에 대한 포인터입니다. 이 값이 NULL이면 현재 작업 디렉토리가 사용됩니다. 상대 경로가 lpFile에서 제공되는 경우 lpDirectory에 대한 상대 경로를 사용하지 마십시오. 유형: INT 응용 프로그램을 열 때 표시 하는 방법을 지정 하는 플래그입니다. lpFile 문서 파일을 지정 하는 경우 플래그는 단순히 관련 된 응용 프로그램에 전달 됩니다. 처리하는 방법을 결정하는 것은 응용 프로그램에 달려 있습니다.

shellexecuteex 예제