강좌 / 팁

윈 도 우 포터블 프로그램 우클릭 메뉴

2011.06.26 13:23

eunnano 조회:11255

일반적인 사용자가  우클릭 메뉴를 레지스트리에 등록할 ?때 ?shell 키를 이용하여 등록합니다.

예를 들어 .txt 파일에 관련된 응용프로그램을 등록할 경우 다음과 같은 형식입니다. 

 

[HKEY_CLASSES_ROOT\txtfile\shell\MyApp]

@="테스트 입니다."

[HKEY_CLASSES_ROOT\txtfile\shell\MyApp\command]

@="D:\\Test\\MyApp.exe \"%1\"" --> 보기 쉽게하면 D:\Test\MyApp.exe %1 입니다.

 

1.JPG

 

 

위와 같은 방식 이외에 응용프로그램을 설치하면 다른 방식을 이용해 우클릭메뉴에 등록하는 경우가 있습니다.

 

2.JPG

 

 

레지스트리를 아무리 검색해 보아도 '압축파일에 추가, 압축해서 이메일 보내기...등등'을 찾을 수 없습니다.

알고 보니, DLL 파일을 이용한 우클릭 메뉴 등록 방법이 따로 있습니다.

첫번째의 shell 키를 이용해 등록하는것을 Static Shortcut Menu 라 부르고, 두번째의 DLL 파일을 이용해 등록하는 것을 Dynamic Shortcut Menu 라고 부릅니다. Shortcut Menu = Context Menu = 우클릭 메뉴 입니다.

DLL 파일을 이용해 등록하는 경우는 shell 키가 아닌 shellex\ContextMenuHandlers ?키를 사용합니다.

7-Zip 을 예로 들면,

 

[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\7-Zip]
@="{23170F69-40C1-278A-1000-000100020000}"

 

--> * 은 모든 파일을 의미합니다. 모든 파일에 위 우클릭 메뉴를 사용할 때의 경로입니다.

 경로 마지막의 7-Zip 이라는 키 이름은 임의적으로 변경 가능한데 이름을 변경한다 하더라도 우클릭 메뉴에 변경된 이름이

표시되는 것은 아닙니다. 위에 나타난 우클릭 메뉴는 전적으로 DLL 파일 내부에 규정된대로 나타납니다. 물론 환경설정에서

우클릭 메뉴에 대한 설정을 변경할 수 있는데 이 부분은 [HKEY_CURRENT_USER\Software\7-Zip] 경로에 관련 설정이 등록되어 제어가 이루어 집니다.( 별개의 문제입니다.)

{23170F69-40C1-278A-1000-000100020000} 는 7-Zip의 고유한 CLSID (Class Iidentifier: 클래스 식별자) 입니다. 마찬가지로

 DLL 파일 내부적으로 규정되어 있고 임의적으로 할당할 수 없습니다. GUID 형식을 취합니다.

 

[HKEY_CLASSES_ROOT\CLSID\{23170F69-40C1-278A-1000-000100020000}\InprocServer32]
@=?"D:\\7-Zip\\7-zip.dll"

"ThreadingModel"="Apartment"

 

--> 처음에 ContextMenuHandlers의 7-Zip 키에 CLSID 값을 지정했으므로, 이 번에는 CLSID 값에 구체적인 정보를 지정해 줍니다. 구체적인 정보라 해봐야 7-zip.dll 파일의 경로를 지정해 주는 것 뿐입니다.??? (그 외에는 하나의 정형화된 형식입니다.)

이 두가지 레지스트리를 등록해주면 7-Zip 의 우클릭 메뉴를 사용할 수 있습니다. 생각보다 간단합니다.^^

추가로 위에서 모든 파일의 경로에만 등록했으므로 디렉토리 우클릭에서도 사용하려면 * 을 directory 로 바꾸어서 추가로 등록해야 사용할 수 있습니다.

CLSID 값이나, 우클릭 메뉴를 담당하는 파일이 어떠한 파일인가는 실제로 설치를 해본다음 7-Zip 으로 검색하여 ContextMenuHandlers\7-Zip 키를 찾아서 CLSID 값을 찾고  다시 CLSID 값을 검색하여 등록된 DLL 파일을 찾아서 알 수 있었습니다.

 

CLSID, InprocServer32, ThreadingModel, Apartment  용어들은 저도 잘 모르고 설명하기도 쉽지 안네요.

참조 링크로 대신합니다.-  https://webdizen.new21.net/blog/1872

 

7-zip.dll 파일은 regsvr32.exe 로 레지스트리에 등록할 수 있게 되어 있습니다. 다음은 regsvr32.exe 로 7-zip.dll 파일을 등록했을 때 등록되는 레지스트리입니다.

 

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}]
@="7-Zip Shell Extension"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}\InprocServer32]
@="D:\\7-Zip\\7-zip.dll"
"ThreadingModel"="Apartment"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved]
"{23170F69-40C1-278A-1000-000100020000}"="7-Zip Shell Extension"

 

위에서 든 예에서는 이중에서 중간 부분만 취해서 사용했습니다. regsvr32.exe 를 이용할 경우 CLSID 부분은 등록되었으니 shellex\ContextMenuHandlers\7-Zip 부분만 등록하면 사용할 수 있습니다.

이에 반해서 UltraISO 같은 경우는 우클릭 메뉴를 담당하는 파일이 isoshl64.dll 인데 regsvr32.exe 로 우클릭에 관련된 모든 레지스트리를 완벽하게 등록합니다.( x64- isoshl64.dll, x86-isoshell.dll 을 사용합니다. 실제 설치 후 레지스트리 검색을 통해 알아 냈습니다.) 

 

 3.JPG

 

4.JPG 

 

5.JPG 

 

 6.JPG

 

 

 

마지막 부분 에러 메세지를 해결하기 위해서는 따로 더 등록해 주어야 되는 부분이 있습니다.

 

[HKEY_CURRENT_USER\Software\EasyBoot Systems\UltraISO\5.0]
@="D:\\UltraISO"

 

제가 사용했던 UltraISO 포터블 파일은 %temp% 폴더에 압축을 풀고 실행시키는 방식이었는데 압축을 푼 파일을 복사해서 사용한 것입니다. x86 기반에서 제작된 방식이라 isoshl64.dll 파일이 없어서 따로 설치후 복사해서 사용했습니다. 이 레지스트리를 찾아내는데 고생좀 했는데 알고보니 원본 포터블 파일은 위와 같은 레지스트리를 시작전에 미리 등록하고 시작하는 방식이었습니다. ^^

 

7.JPG

 

이번 예는 Beyond Compare 3 라는 비교 유틸입니다.

BCompare.exe 라는 파일만 하나 있는 포터블인데 실행시키면 현재 폴더에 BCompare 폴더를 만들고 필요한 정보를 저장합니다. BCShellEx64.dll 은 원본을 설치해서 복사해온 것입니다. regsvr32.exe 로 레지스트리 등록하는 것을 지원하지 않습니다.

다음과 같이 등록하면 사용할 수 있습니다.

 

[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\CirrusShellEx]
@="{57FA2D12-D22D-490A-805A-5CB48E84F12A}"

[HKEY_CLASSES_ROOT\Directory\shellex\ContextMenuHandlers\CirrusShellEx]
@="{57FA2D12-D22D-490A-805A-5CB48E84F12A}"

[HKEY_CLASSES_ROOT\CLSID\{57FA2D12-D22D-490A-805A-5CB48E84F12A}\InProcServer32]
@="D:\\BCompare\\BCShellEx64.dll"

 "ThreadingModel"="Apartment"

 

8.JPG

 

 

다음은 Hash를 체크할 수 있는 유틸(HashCheck.dll) 에 대한 예입니다.

 

9.JPG 

 

10.JPG 

 

HashCheckInstall-2.1.11.exe 를 실행해서 설치하면 x64용, x86용 HashCheck.dll 을 System32, SysWOW64 폴더에 각각 설치합니다. 그리고 제작자 정보, 버전 정보등도 추가로 레지스트리 등록합니다. 그 중 System32 폴더에 설치된 HashCheck.dll 파일을 복사해와서 regsvr32.exe로 등록해서 사용할 수 있습니다. regsvr32.exe 보다 레지스트리 등록되는 것을 줄이려면 다음과 같이 등록하면 위 두가지 기능을 사용할 수 있습니다.

 

[HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\PropertySheetHandlers\HashCheck Shell Extension]
@="{705977C7-86CB-4743-BFAF-6908BD19B7B0}"?

[HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\HashCheck Shell Extension]
@="{705977C7-86CB-4743-BFAF-6908BD19B7B0}"

[HKEY_CLASSES_ROOT\CLSID\{705977C7-86CB-4743-BFAF-6908BD19B7B0}\InprocServer32]
@="D:\\HashCheck\\HashCheck.dll"
"ThreadingModel"="Apartment"

 

첫번째 속성창은 ContextMenuHandlers 대신에 PropertySheetHandlers 키를 사용한다는 점이 다릅니다.

기타 shellex 키에 등록해 사용할 수 있는 Handlers 에 관해서 https://msdn.microsoft.com/en-us/library/cc144110.aspx

를 참조해 보세요.

번호 제목 글쓴이 조회 추천 등록일
[공지] 강좌 작성간 참고해주세요 gooddew - - -
3470 윈 도 우| 윈7의 미디어 플레이어로 tp파일을 보자... [9] 나야야 11324 0 05-08
3469 소프트웨어| 유튜브 동영상도 손쉽게 다운로드 할수 있는 기능이 추가되... [39] Star★Bros 11323 9 11-02
3468 윈 도 우| 윈도우 8 서버 프리뷰 액티베이션 키 [2] 우금티 11323 0 09-23
3467 윈 도 우| 5/11 일자 SP3 누적 업데이트 + DotnetFX 3.5 SP1 [22] 오펜하이머 11317 5 04-26
3466 소프트웨어| Reverse Engeneering- Assembly [6] publicstat 11304 0 08-17
3465 윈 도 우| Bluray원본에 한글자막 넣기(2부) [2] 동방전패 11304 3 08-19
3464 윈 도 우| Microsoft Dreamspark 정품 다운 [4] vooooov 11298 2 08-22
3463 소프트웨어| Adobe CS2 시리즈 무료로 사용하기. [5] 달려야하니 11275 2 04-24
3462 윈 도 우| 서비스팩 설치시 구성 요소 오류에 대한 팁 [5] hbkid 11275 0 01-17
3461 하드웨어| 프린터 드라이버 PCL-6와 Post Script 차이 [3] asklee 11270 1 09-14
3460 윈 도 우| 윈도 8.1 원본에 언어팩을 적용시키는 방법 [10] 필로 11260 1 09-01
3459 윈 도 우| PC에서 MS로 주기적으로 정보를 전송하는 것을 막는 방법입... [21] 서비스 11256 5 08-09
» 윈 도 우| 포터블 프로그램 우클릭 메뉴 [4] eunnano 11255 0 06-26
3457 윈 도 우| 윈도우7도 자체 음장을 지원하는군요.... [3] Native 64 11245 0 03-12
3456 VMware player 3.0 부터 가상머신 생성이 가능해 졌습니다 [3] 그루터기 11244 0 10-31
3455 하드웨어| 센스 Q310-AS25 바이오스 업데이트 하세요. 사이버099 11239 0 02-12
3454 VISTA 무게를 조금이라도 줄일 수 있는 팁 [5] ASUS 11224 1 09-24
3453 윈 도 우| 4. 시스템 복구 디스크 만들기 공피 11222 1 02-14
3452 모 바 일| 카카오톡 친구 추가없이 전화번호 등록하기 [8] 고양이2 11215 3 09-13
3451 소프트웨어| usb에 hirens 넣기 [1] kailcarson 11215 0 02-12
XE1.11.6 Layout1.4.8