여러 파일을 인수로 사용하는 쉘 컨텍스트 메뉴 항목을 작성하는 방법


11

단일 파일을 인수로 사용하는 Windows Shell 상황에 맞는 메뉴 항목을 만드는 것은 쉽습니다. 예를 들어이 질문 을 참조하십시오 .

그러나 여러 파일을 인수로 취하는 컨텍스트 메뉴 항목을 어떻게 작성합니까? diff-merge 도구 (필자의 경우 P4Merge)의 경우 다른 기술에도 동일한 기술을 적용 할 수 있습니다.

P4Merge를 설치했지만 컨텍스트 메뉴에 항목을 자동으로 추가하지 않으므로 수동으로 수행해야합니다.

내가 사용하려고했을 때 :

"C:\Program Files\Perforce\p4merge.exe" %1 %2

커맨드 라인으로 오류가 발생했습니다.

오류 : 두 개 이상의 파일이 필요합니다. 하나의 파일 만 열 수 없습니다. P4Merge에는 0, 2 또는 3 개의 파일이 필요합니다.

내가 사용하려고했을 때 :

"C:\Program Files\Perforce\p4merge.exe" %0 %1

명령 행으로 P4Merge의 각 인스턴스마다 하나씩 두 개의 인스턴스를 열었습니다.

올바른 파일 이름이 % 0 및 % 1 (으)로 전달되고 있지만 각기 다른 P4Merge 응용 프로그램 인스턴스가 실행되고 있습니다.

현재 Shell 컨텍스트 메뉴에 항목이 있고 두 파일을 선택하고 컨텍스트 메뉴 항목을 사용하여 diff를 실행할 수 있기 때문에 SourceGear의 DiffMerge 도구가 아름답게 작동합니다. 레지스트리를 검색하여 DiffMerge가 사용하는 인수를 확인하려고했지만 인수가 포함 된 DiffMerge 명령 줄을 찾을 수 없습니다.


3
알다시피 간단한 레지스트리 해킹으로 원하는 작업을 수행 할 수있는 방법이 없습니다. 확장은 하나의 개체에만 적용되고 여러 개체에 대해 별도로 실행되기 때문에 % 1 만 있습니다. 완전한 쉘 확장을 프로그래밍해야합니다. 그러나 레지스트리 해킹이 허용하는 것보다 더 고급 컨텍스트 메뉴 작업을 수행 할 수있는 일부 프로그램 / 셸 확장이 있습니다. (내가 기억할 수있는 유일한 것은 MMM 입니다.) 불행히도, 여러 객체를 떨어 뜨리지 않고 하위 메뉴를 만들도록 제한하는 경향이 있습니다.
Synetech

답변:


20

SendTo 메뉴에 프로그램을 추가 할 수도 있습니다.


예, 잘 작동합니다.
Synetech

1
완벽하게 작동했습니다. 다음은 Windows 7의 SendTo 메뉴에 응용 프로그램을 추가하는 방법에 대한 지침 입니다. 명령 줄 매개 변수를 추가 할 필요가 없었으며 응용 프로그램 바로 가기를 % APPDATA % \ Microsoft \ Windows \ SendTo 폴더에 추가했습니다. Windows 탐색기로 돌아가서 두 파일을 선택한 다음 마우스 오른쪽 단추를 클릭하고 보내기> P4Merge를 선택하면 선택한 파일에서 차이가 발생했습니다.
SimonTewsi

4

답을 찾아 보면 간단한 수정이 없으며 셸 확장이 필요한 것 같습니다. DiffMerge의 레지스트리 항목을 다시 보면, 셸 확장 : DiffMergeShellExtension64.dll을 사용하는 것으로 보입니다. P4Merge에 그러한 쉘 확장자가 없다면 Windows 탐색기 컨텍스트 메뉴에서 올바르게 작동하도록 할 수있는 유일한 방법은 직접 작성하는 것입니다.

코드 프로젝트의 셸 확장 작성에 대한 완전한 바보 안내서 시리즈는 셸 확장 작성 에 유용한 안내서입니다. 이 시리즈의 파트 II는 여러 파일을 한 번에 처리하는 확장 기능 (정확히 필요한 것)을 작성하는 것에 관한 것입니다.

경고 : Shell Extension 작성에 대한 완전한 바보 안내서는 C 및 COM, ATL (Active Template Library) 및 MFC (Microsoft Foundation Classes)를 사용합니다. 따라서 이러한 기술에 익숙하지 않은 경우 쉘 확장을 작성하는 것은 길고 잠재적으로 어려운 과정입니다. 한 시간 안에 할 수있는 일은 아닙니다.


2

내 프로그램 context-menu-launcher (단일 인스턴스)로 할 수 있습니다 .

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge]
"MultiSelectModel"="Player"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge\Command]
@="\"d:\\singleinstance.exe\" %1 \"C:\\Program Files\\Perforce\\p4merge.exe\" $files --si-timeout 400"

.exe자동 다운로드가 시작된다는 것을 확실하게 밝히지 않고 답변 에있는 파일에 직접 링크하지 마십시오 .
DavidPostill

고마워요. 단일 파일 애플리케이션을 각 파일 유형의 파일 연관에 개별적으로 추가하지 않고 파일 유형과 연관시킬 수있는 방법이 있습니까? 예를 들어, 현재 XML 파일, SQL 스크립트, 구성 파일, * .cs 파일, .gitignore 파일 등을 비교하기 위해 DiffMerge를 사용하고 있습니다.
SimonTewsi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.