2017-03-19 1 views
0

필자는 하루 종일 책을 읽었으며 Windows 탐색기를 만드는 방법에 따라 여러 파일을 마우스 오른쪽 단추로 클릭 할 때 컨텍스트 메뉴에서 사용자 지정 메뉴를 추가 할 수 있습니다.셸 확장이 선택한 여러 파일을 내 프로그램으로 어떻게 전달합니까?

셸 확장 프로그램이 내 C# wpf 프로그램을 말하고 이러한 모든 경로를 얻으려면 선택한 파일을 전달하겠습니까?

내 프로그램을 패키징하려면 내 프로그램과 셸 확장을 함께 설치해야 함을 의미합니까? 둘 다 함께 설치되어 함께 사용할 수 있습니까?

나는 그것을 구현하는 과정에서 내 머리를 잡으려고 몇 시간을 소비했다.

답변

2

쉘 확장은 다수의 파일 경로에 액세스 할 DragQueryFile API (How to Drag and Drop multiple files between Namespace extensions 참조) 쉘 확장에 의해 사용이 CF_HDROP 형상 데이터로 IDataObject* 인자의 주어진 IShellExtInit::Initialize 통화와 초기화를 수신한다.

셸 확장이 파일 경로를 추출하고 셸 확장에서 시작한 응용 프로그램에 컬렉션을 전달해야하는 경우 문자열을 더 전달하는 방법을 자유롭게 정의 할 수 있습니다. 예를 들어, 경로 문자열에서 명령 행을 형식화하거나 임시 파일에 경로를 기록한 다음 이름을 명령 행 인수로 전달할 수 있습니다.

문자열을 이미 실행중인 응용 프로그램에 전달하려면 WM_COPYDATA 메시지 (Use WM_COPYDATA to send data between processes 참조) 또는 대체 IPC 방법을 사용하는 것이 좋습니다.

+0

나는 컬렉션을 보유하고있는 임시 파일을 만들고 명령 행 args에 패스 문자열을 전달한다. 그게 효과가있어, 나는 쉼표로 구분 된 텍스트로 모든 경로를 형성하고 % 1 (으)로 전달하는 줄에서 생각하고 있었다. 그러나 문자열이 데이터를 수용하기에는 너무 작을 것이라고 걱정했습니다. 시원한 – Chopnut

관련 문제