강좌 / 팁

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

2011.06.26 13:23

eunnano 조회:11259

일반적인 사용자가  우클릭 메뉴를 레지스트리에 등록할 ?때 ?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 - - -
3483 소프트웨어| 무료 파일 올리기 [8] publicstat 6809 0 04-21
3482 윈 도 우| 바탕화면 익스플러생성 [3] 산울림 35301 0 04-21
3481 소프트웨어| 오마이뉴스 너 가만 안둘테야~! [15] 우금티 8455 1 04-22
3480 윈 도 우| WINDOW7에서 16BIT DOS 게임즐기기 _DOSBOX활용_ [4] K2 8342 0 04-23
3479 소프트웨어| 안드로이드폰으로 CYBERLINK POWERDVD 11 Romote 하기 [1] 아리송해 8342 0 04-24
3478 윈 도 우| 바탕화면에 익스플로러아이콘 생성 + 복구 [14] 그리움 21232 0 04-24
3477 윈 도 우| 인텔의 칩셋 드라이버에 대해서.. [16] 그리움 14148 0 04-25
3476 소프트웨어| 토렌트 자석주소(마그넷) 먹통 해결법 [6] melody128 24682 0 04-25
3475 윈 도 우| USB로 윈도7설치, PE활용하기(추가) [25] 고라이안 23752 1 04-28
3474 소프트웨어| 한글인터넷주소도우미 삭제하기-제휴검색삭제(야후) [6] byestars 9457 0 04-28
3473 소프트웨어| 크롬 - 기본글꼴을 맑은고딕으로 [12] 지니왕자 12120 1 05-03
3472 서버 / IT| 서버8 M3의 유용한 유닉스 명령어 소개 [3] 우금티 7989 0 05-03
3471 윈 도 우| IE9과 플래쉬 플레이어 [8] 기미드 15958 0 05-06
3470 윈 도 우| 자동실행이안될때... [5] SE7EN 7779 0 05-07
3469 윈 도 우| Sysprep(일반화)에 대한 이해-Sysprep업뎃하기 [2] rt041 12281 0 05-08
3468 소프트웨어| 윈미플12 + VOBSUB + 하드웨어가속 [4] TheCLASS 9010 0 05-09
3467 소프트웨어| SSD유저를 위한 우분투 11.04 최적화 설정 [3] 수퍼센트 12900 0 05-10
3466 윈 도 우| 단일 계정 로그인 화면에 '다른 사용자' 아이콘이 뜰 때 [4] 블루블루 7031 0 05-12
3465 윈 도 우| 키보드볼륨이 없는 키보드를 위해... [15] Andrei Sak 8784 0 05-12
3464 윈 도 우| IE8-구글을 기본 검색자로 등록시키는 레지스트리 [4] 지루박 8003 0 05-14
XE1.11.6 Layout1.4.8