(레지스트리) 마우스 우측버튼 메뉴에 ‘텍스트 문서’ 및 ‘새 폴더’ 만들기 기능 추가하기 Dos_Network_Security

“레지스트리(Registry)”는 윈도우가 사용하는 일종의 ‘데이터베이스’다.

‘레지스트리’에 대한 설명은 아래의 링크 참조:

참고로, 이 글은 ‘윈도우7’ 에서 테스트 하여 작성하였으며, ‘윈도우XP’ 나 ‘윈도우8’ 과 약간 다를 수 있지만, ‘레지스트리’가 구조적으로 크게 바뀐 것이 없기 때문에 거의 비슷하리라 예상한다.

윈도우의 ‘시작 → 실행’ 에서 ‘regedit’를 입력하면, ‘레지스트리 편집기’를 열 수 있다.

‘레지스트리’는 윈도우가 사용하는 각종 환경정보들이 저장된 일종의 ‘데이터베이스’로, 전문가가 아니면 알 수 없는 명령어들과 이진수들이 들어 있으므로, 실수로 수정하거나 삭제하면 다시 되돌릴 수 없어 윈도우에 치명적인 에러가 발생할 수 있기 때문에 되도록이면 건드리지 않는 것이 좋다.
따라서 ‘레지스트리’ 조작에 자신이 없다면 작업 전에 반드시 백업(내보내기)을 해두고, 중간에 잘못 조작했다면 복구(가져오기)를 하는 것이 좋다.

예전부터, 윈도우 화면에서 마우스 우측버튼을 눌렀을 때 나오는 메뉴에 어떤 기능을 추가해보고 싶었는데, 꽤 오랫동안 자료를 찾아보고 연구를 해보아도 쉽게 알아내기 힘들었다.
이번에 집중적으로 테스트 해보고 분석해서, 완벽하지는 않지만 비슷하게 동작하도록 구현해 보았다.

개인적으로 스크랩을 많이 하다 보니, ‘텍스트 문서(노트패드)’와 ‘새 폴더’를 만드는 경우가 많은데, 윈도우 자체적으로 ‘새로 만들기’ 하부 메뉴에 ‘폴더(F)’ 와 ‘텍스트 문서’ 만들기 기능을 지원하지만, 실행을 시키려면 한 단계를 거쳐 내려가야 클릭할 수 있기 때문에 꽤 불편하다.

‘V3Zip’ 이나 ‘알집’을 설치하면, 이 우측메뉴 제일 상단에 ‘새 폴더’를 만드는 메뉴가 추가되어 상당히 편해지지만, 여전히 ‘텍스트 문서(.txt)’를 만들기 위해서는 서브 메뉴를 열어야 하는 불편함이 있다.
그래서 ‘텍스트 문서’를 만드는 기능을 따로 넣을 방법이 없을까 고민을 해보았다.
하는 김에 ‘새 폴더’를 생성하는 기능도 추가해보자.

마우스 우측버튼을 눌러서 나오는 메뉴는 두 가지 형태가 있다.
빈 바탕화면을 눌렀을 때 나오는 메뉴가 있고, 파일을 선택한 후 마우스 우측버튼을 누를 때 나오는 메뉴가 있다.
이 두 가지는 레지스트리에서 전혀 다른 곳에서 관리된다.
따라서 어떤 작업을 할 것인가에 따라 레지스트리 조작이 달라진다.


1. 빈 바탕화면을 눌렀을 때 나오는 마우스 우측버튼 메뉴.
이 메뉴와 관련된 레지스트리는 아래의 주소에 있다.

컴퓨터\HKEY_CLASSES_ROOT\Directory\Background\shell

여기에 명령어를 추가하면, 빈 바탕화면을 마우스 우측버튼으로 눌렀을때 나오는 메뉴를 조작할 수 있다.

첫 번째로, 텍스트 문서를 여는 명령을 만들어 보자.

위의 경로에 ‘test’ 라는 키 값(폴더 형태)을 추가한다.
(test 라는 키 값 자체가 가지는 의미는 없다.)

경로는
컴퓨터\HKEY_CLASSES_ROOT\Directory\Background\shell\test
이다.


그리고 그 키 값을 찍어 나온 우측 화면에서 (기본값) 을 더블클릭하여 ‘새 텍스트문서’ 라는 내용을 입력한다.
그러면, 위의 화면 우측상단에 보이는 메뉴처럼 ‘새 텍스트문서’ 라는 메뉴가 추가된다.

‘test’ 키 값을 선택한 후, 다시 새로 ‘키값’ 을 ‘command’ 라는 이름으로 만든다.
레지스트리에서 ‘command’ 라는 키 값은 명령어를 수행하도록 하는 고정된 이름의 값이다.
‘command’ 키 값을 선택하여, 우측화면에서 기본 값으로 ‘c:\windows\notepad.exe’ 라는 값을 넣는다.

그러면, 위 화면에서 보이는 것처럼 마우스 우측버튼을 눌렀을 때 나오는 ‘새 텍스트문서’ 라는 메뉴를 누르면 ‘notepad.exe’가 실행된다.


두 번째, ‘새 폴더’를 만드는 기능을 추가해보자.

이번에는 ‘shell’ 키 아래에 ‘test2’ 라는 키 값을 만든다.
(‘test2’ 라는 키 값이 가지는 의미는 없다.)
‘test2’ 키 값 아래에 ‘command’ 라는 키 값을 만든다.
위에서 언급한대로 ‘command’ 라는 키 값은 고유한 값으로, 명령어를 실행할 수 있는 키 역할을 한다.
‘command’ 라는 키 값을 만든 후, 그 우측화면에서 기본 값을 ‘새 폴더’ 라고 넣는다.

‘(기본값)’ 부분을 더블클릭하면 수정할 수 있는 팝업창이 뜬다.

‘command’ 키 값에는 위 화면처럼,

"cmd.exe" " /c mkdir 새폴더"

같은 명령어를 넣어준다.

이는 ‘cmd.exe’(도스 콘솔)을 실행시키며, 부가 옵션으로 ‘/c’를 주고, ‘새폴더’ 라는 이름의 폴더를 만드는 ‘mkdir’ 명령어를 실행하는 내용이다.

이와 같이 하면, 마우스 우측 버튼을 눌렀을 때 ‘새 폴더’ 라는 메뉴가 추가되고, 그 메뉴를 클릭하면 ‘새폴더’ 라는 폴더가 생성된다.

자.
그런데, 기존에 윈도우에서 제공하는 폴더 만들기 기능에는 폴더 이름이 중복될 경우 뒤에 숫자를 붙여서 다른 이름으로 만들어 주는 기능이 있다.
위와 같이 단순한 명령어를 넣어준다면, 현재 폴더를 만들려는 경로에 ‘새폴더’ 라는 이름이 있을 경우 아무 동작도 하지 않게 된다.
도스 내부적으로는 ‘폴더가 중복되었다.’ 라는 에러메시지가 출력되지만, ‘/c’ 옵션으로 도스창이 바로 닫히기 때문에 보이지 않는다.

윈도우 자체적인 기능을 이용해 폴더를 만들 때, 보통은 위 그림과 같이 최초에 ‘새 폴더’를 만들고, 그 다음부터는 이름이 중복되면 숫자를 붙여주는 방식으로 폴더가 생성된다.
이와 똑같은 기능을 구현하기 위해서는 추가적으로 도스 명령어를 넣어주어야 한다.

이와 관련한 글은 일단 아래의 링크에 자세히 소개되어 있으므로 참조:

도스에서 사용하는 명령어를 이용해, 같은 이름의 폴더가 있을 경우 다른 이름으로 만드는 명령구문을 만들어야 한다.

if not exist "새 폴더" (mkdir "새 폴더") else if not exist "새 폴더 (2)" (mkdir "새 폴더 (2)") else if not exist "새 폴더 (3)" (mkdir "새 폴더 (3)") else if not exist "새 폴더 (4)" (mkdir "새 폴더 (4)") else if not exist "새 폴더 (5)" (mkdir "새 폴더 (5)")

위와 같이 조건문을 넣어주면 된다.

‘command’의 값에 위와 같이 조건문이 들어 간 명령문을 넣어준다.
넣어줄 값은 아래와 같다.

cmd /c if not exist "새 폴더" (mkdir "새 폴더") else if not exist "새 폴더 (2)" (mkdir "새 폴더 (2)") else if not exist "새 폴더 (3)" (mkdir "새 폴더 (3)") else if not exist "새 폴더 (4)" (mkdir "새 폴더 (4)") else if not exist "새 폴더 (5)" (mkdir "새 폴더 (5)")

위와 같이 값을 넣어주면, ‘새 폴더 (5)’ 까지는 중복체크를 해서 폴더를 생성할 때 이름이 다르게 생성한다.


2. 마우스 왼쪽 버튼으로 파일을 선택한 후, 마우스 오른쪽 버튼을 눌렀을 때 나오는 메뉴 조작하기.
이번에는 위에서 언급한 것과는 조금 다르게, 파일을 직접 선택한 후 마우스 우측버튼을 눌렀을 때 나오는 메뉴와 관련된 레지스트리를 살펴보자.
미리 언급한대로, 이 기능에는 전혀 다른 레지스트리가 사용된다.
마우스 왼쪽 버튼을 눌러 파일을 선택하면, 윈도우는 각 파일이 가진 확장자(예를 들어, exe, gif, jpg 등등)를 기준으로 레지스트리에 등록된 정보를 읽어 들인다.

레지스트리 첫 번째 항목인 ‘HKEY_CLASSES_ROOT’ 상단에 보면 각각의 확장자 이름들이 등록되어 있는 것이 보일 것이다.
이는, 각 확장자 별로 별도의 키 값을 등록해두고, 윈도우에서 어떤 확장자를 선택했을 때 등록된 키 값으로 연결하도록 되어 있는 구조인 것 같다.

이번에 테스트할 내용은, 너무 깊게 접근하기 보다는 단순하게 이 기능이 어떤 식으로 동작하며 어떻게 조작할 수 있느냐 하는 맛보기 정도로 살펴보자.
일단, 특정 확장자를 다루지는 않고, 모든 파일에 공통으로 동작하게 하기 위해서 ‘*’ 라는 항목을 건드려보자.
윈도우의 도스에서 ‘*’ 라는 기호는 ‘모든 것’을 의미한다.
즉, 모든 파일의 확장자에 공통적으로 동작하는 키 값을 의미한다고 볼 수 있다.

첫 번째로, 파일을 선택한 후 마우스 우측버튼을 눌렀을 때, ‘노트패드’를 열도록 설정을 해보자.
(해당 파일의 종류에 상관없이 무조건 ‘노트패드’로 빈 텍스트 문서 열기)

레지스트리의 경로는

컴퓨터\HKEY_CLASSES_ROOT\*\shell

이다.
여기에 키 값을 ‘test-’ 라고 만들고, 우측 화면에서 키 값 내용을 ‘새 텍스트 문서’ 라고 작성했다.
아무 파일이나 선택한 후 마우스 우측버튼 메뉴를 눌러보면, 상단에 ‘새 텍스트 문서’ 라는 메뉴가 생성된 것을 확인할 수 있다.

만약, 키 값의 우측 화면에서 (기본값) 에 아무 값도 넣지 않으면, 그냥 원래 키 값인 ‘test-’가 표시된다.

이 메뉴를 클릭해보면, 아직 아무 내용도 들어있지 않기 때문에 위 화면처럼 ‘연결된 프로그램이 없습니다.’ 라는 에러메시지가 뜬다.

‘test-’ 키 하단에 명령어 키인 ‘command’를 만들고, 값에 ‘notepad’를 넣어주면, 어떤 종류의 파일을 선택해서 ‘test-’ 라는 메뉴를 클릭하면 위 화면과 같이 무조건 빈 텍스트 문서가 열린다.

이번에는, 위와 같이 빈 텍스트 문서를 연결하는 것이 아니라 텍스트 문서에 선택한 파일의 내용(소스)을 넣어서 불러오도록 해보자.

‘command’ 키 값의 우측화면에서 (기본값)에 "c:\windows\notepad.exe" "%1" 라는 값을 넣었다.
‘%1’ 값을 뒤에 붙여주면, 선택한 파일의 정보를 불러오도록 한다.

조금 다른 방식으로 아래와 같이 할 수도 있다.

키의 기본값에 notepad "%1" 을 넣어주었다.
‘test.jpg’ 파일의 내용(소스)을 텍스트 문서에 불러와서 보여준다.

기존에 ‘울트라에디터’, ‘에디트플러스’, ‘아크로에디트’ 같은 텍스트 편집 프로그램들도 이와 같은 방식을 이용하면 쉽게 연결할 수 있다.

덧글

  • 네넹 2016/11/15 18:37 # 삭제 답글

    대박이네요.

    진짜 똑똑하신 분인듯해요.
    요즘 표현으로 리스펙트 합니다.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


통계 위젯 (화이트)

16051879
12361
9925524

google_myblogSearch_side

▷검색어

Flag Counter style2