- notepad2 컴파일 삽질기 부록#3 : 메모장 대신 사용
- 컴퓨터야그/notepad2
- 2009. 1. 7. 01:09
okto님 배포본 notepad2는 설치 및 윈도우 메모장 대체를 위해 notepad.inf 파일을 이용했습니다.
이 방식은 설치가 쉽다는 장점은 있지만, 설치 제거에 손이 많이 간다는 단점이 있습니다.
장점을 살리고 단점을 제거하기 위해 구차니님께서 메모장을 대체하는 기능을 구현해주셨습니다.
이 기능을 사용하려면 소스 코드를 아래와 같이 수정하면 됩니다.
수정 대상 파일은 역시 resource.h, Notepad2.rc, Notepad2.c 세 개입니다.
1. resource.h
2. Notepad2.rc
3. Notepad2.c
수정된 결과는 아래와 같습니다. 짜잔~

수정에 계속 수고해주신 구차니님께 감사드립니다.
이 방식은 설치가 쉽다는 장점은 있지만, 설치 제거에 손이 많이 간다는 단점이 있습니다.
장점을 살리고 단점을 제거하기 위해 구차니님께서 메모장을 대체하는 기능을 구현해주셨습니다.
이 기능을 사용하려면 소스 코드를 아래와 같이 수정하면 됩니다.
반드시 notepad2 컴파일 삽질기 부록#2 : context-menu 추가 업그레이드를 적용한 후에 이 수정을 해야 합니다
수정 대상 파일은 역시 resource.h, Notepad2.rc, Notepad2.c 세 개입니다.
1. resource.h
우선, 다음 줄을 추가합니다.
다음으로 아래 내용을 찾습니다.
이것을 이렇게 수정합니다.
1 | #define IDM_REPLACE_NOTEPAD 40228 |
다음으로 아래 내용을 찾습니다.
1 | #define _APS_NEXT_COMMAND_VALUE 40228 |
1 | #define _APS_NEXT_COMMAND_VALUE 40229 |
2. Notepad2.rc
아래 내용을 찾습니다.
이 바로 앞에 다음 줄을 추가합니다.
1 2 | MENUITEM "Add context-menu to all file type" , IDM_REGISTRY_ALL , CHECKED |
1 | MENUITEM "Replace Notepad" , IDM_REPLACE_NOTEPAD |
3. Notepad2.c
앞부분에 다음 변수를 하나 선언합니다.
다음, void MsgInitMenu(HWND hwnd,WPARAM wParam,LPARAM lParam)에서 아래 내용을 찾습니다.
이 바로 앞에 다음 줄을 추가합니다.
다음, LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) 함수에 다음 case 문을 추가합니다.
이 함수 전체가 하나의 switch-case 문으로 되어있는데, case를 하나 추가하는 것입니다.
마지막으로 void CheckRegistry() 함수의 마지막 부분에 다음 내용을 추가하면 됩니다.
1 | BOOL bReplaceNotepad; |
다음, void MsgInitMenu(HWND hwnd,WPARAM wParam,LPARAM lParam)에서 아래 내용을 찾습니다.
1 | CheckCmd(hmenu,IDM_REGISTRY_UNKNOWN,bRegistryUnknownType); |
1 | CheckCmd(hmenu,IDM_REPLACE_NOTEPAD,bReplaceNotepad); |
다음, LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) 함수에 다음 case 문을 추가합니다.
이 함수 전체가 하나의 switch-case 문으로 되어있는데, case를 하나 추가하는 것입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | case IDM_REPLACE_NOTEPAD: if (bReplaceNotepad) { //WinNT requires the key to have no subkeys RegDeleteKey(HKEY_LOCAL_MACHINE, L "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe" ); } else { HKEY key1; LONG res = RegCreateKey(HKEY_LOCAL_MACHINE,L "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe" ,&key1); if (res == ERROR_SUCCESS) { WCHAR cmd[MAX_PATH + 4]; WCHAR path[MAX_PATH]; int len; GetModuleFileName(GetModuleHandle(NULL), path, MAX_PATH); len = wsprintf(cmd, L "\"%s\" /z" , path); RegSetValueExW(key1, L "Debugger" , 0, REG_SZ, cmd, len * 2); } RegCloseKey(key1); } bReplaceNotepad = (bReplaceNotepad) ? FALSE : TRUE; break ; |
마지막으로 void CheckRegistry() 함수의 마지막 부분에 다음 내용을 추가하면 됩니다.
1 2 3 4 5 | res = RegOpenKey(HKEY_LOCAL_MACHINE,L "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe" ,&key); if (res == ERROR_SUCCESS) bReplaceNotepad = TRUE; else bReplaceNotepad = FALSE; RegCloseKey(key); |
수정된 결과는 아래와 같습니다. 짜잔~

수정에 계속 수고해주신 구차니님께 감사드립니다.
'컴퓨터야그 > notepad2' 카테고리의 다른 글
notepad2 컴파일 삽질기 1++ : 기본적인 오류 수정(3.1.21.5-rc4 용) (5) | 2009.06.05 |
---|---|
notepad2 버그패치: ASCII Art 수정 (5) | 2009.01.11 |
notepad2 컴파일 삽질기 부록#2 : context-menu 추가 업그레이드 (5) | 2008.12.30 |
notepad2 컴파일 삽질기 부록#1 : context-menu 추가 (7) | 2008.12.29 |
notepad2 컴파일 삽질기 4 : Visual C++ 6.0 SP6 컴파일 (21) | 2008.12.06 |
Recent comment