강좌 / 팁

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

2011.06.26 13:23

eunnano 조회:11256

일반적인 사용자가  우클릭 메뉴를 레지스트리에 등록할 ?때 ?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 - - -
4496 윈 도 우| PrincePE_V18.5 [164] %카리스마 204987 99 02-02
4495 윈 도 우| 윈도우7 Windows 정품 인증 기술 업데이트로 인증하기 [21] 얼룩강아지 111629 0 02-27
4494 윈 도 우| 비스타(VISTA) 인증 후 무한 리부팅 현상 해결법 [1] gooddew 98133 0 06-17
4493 윈 도 우| 바이오스 안에 OEM SLIC 가 내장되었는지 확인하는 방법 [5] gooddew 84995 0 06-17
4492 윈 도 우| UEFI-모드 부팅 [설치 USB] 만들기 [8] eunnano 77038 0 09-07
4491 A.I 사용법 무작정 따라하기 (스샷 첨부) - 마지막 수정 [67] PoLaRiS 74991 6 09-10
4490 하드웨어| 유튜브 버퍼링 완전해결2 (hosts파일 사용, DNS변경 x, SKB... [44] hsk 63936 6 05-06
4489 윈 도 우| 비스타/세븐 DVD-4cd 분할 가이드 v2 김간지 63413 0 01-21
4488 윈 도 우| Usb를 이용한 XP설치 [21] 고맙쥐 62285 11 10-23
4487 윈 도 우| 비스타의 숨겨진 부팅로고를 보자 [5] cdcsj 60484 0 05-26
4486 윈 도 우| 소소한팁..Windows 로그온 사진이 작을때.. 김간지 59255 0 07-12
4485 윈 도 우| God Mode 만들기 [5] 적광 55432 0 12-26
4484 기 타| Superfetch 기능 사용중단하기 [13] gooddew 55294 1 09-16
4483 윈 도 우| Win7_8 PE/수정/추가/바탕화면/교체하기 [13] 까꾸리 54362 17 05-18
4482 Windows 7 과 XP 프린터와 파일 서로 공유하기 [5] sp2 52848 3 08-22
4481 윈 도 우| 윈도우8 다국어 언어팩 설치 방법(영문 기준) [7] chkid 51185 5 11-11
4480 윈 도 우| 삼성 노트북의 복원솔루션 5 를 이용하여 SSD에 복원영역 ... [13] 울랄라백수 48975 4 06-17
4479 소프트웨어| USB키보드인채로 PLOP 사용하기 (USB 2.0 MODE + PE) [19] hazuki 48384 0 01-19
4478 윈 도 우| 만능고스트 사용후 hal.dll 오류로 부터 벗어나기 [2] cdcsj 47764 0 04-29
XE1.11.6 Layout1.4.8