이 방식은 설치가 쉽다는 장점은 있지만, 설치 제거에 손이 많이 간다는 단점이 있습니다.
장점을 살리고 단점을 제거하기 위해 구차니님께서 메모장을 대체하는 기능을 구현해주셨습니다.
이 기능을 사용하려면 소스 코드를 아래와 같이 수정하면 됩니다.
반드시 notepad2 컴파일 삽질기 부록#2 : context-menu 추가 업그레이드를 적용한 후에 이 수정을 해야 합니다
수정 대상 파일은 역시 resource.h, Notepad2.rc, Notepad2.c 세 개입니다.
1. resource.h
우선, 다음 줄을 추가합니다.
다음으로 아래 내용을 찾습니다.
#define IDM_REPLACE_NOTEPAD 40228
다음으로 아래 내용을 찾습니다.
#define _APS_NEXT_COMMAND_VALUE 40228이것을 이렇게 수정합니다.
#define _APS_NEXT_COMMAND_VALUE 40229
2. Notepad2.rc
아래 내용을 찾습니다.
MENUITEM "Add context-menu to all file type", IDM_REGISTRY_ALL이 바로 앞에 다음 줄을 추가합니다.
, CHECKED
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() 함수의 마지막 부분에 다음 내용을 추가하면 됩니다.
BOOL bReplaceNotepad;
다음, void MsgInitMenu(HWND hwnd,WPARAM wParam,LPARAM lParam)에서 아래 내용을 찾습니다.
CheckCmd(hmenu,IDM_REGISTRY_UNKNOWN,bRegistryUnknownType);이 바로 앞에 다음 줄을 추가합니다.
CheckCmd(hmenu,IDM_REPLACE_NOTEPAD,bReplaceNotepad);
다음, LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam) 함수에 다음 case 문을 추가합니다.
이 함수 전체가 하나의 switch-case 문으로 되어있는데, case를 하나 추가하는 것입니다.
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() 함수의 마지막 부분에 다음 내용을 추가하면 됩니다.
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);
수정된 결과는 아래와 같습니다. 짜잔~
수정에 계속 수고해주신 구차니님께 감사드립니다.
소소 하이라이트 플러그 인이 문자열도 빨간색, 주석도 빨간색으로 처리 하니
답글삭제레지스트리 키가 주석같이 보이네요.
매번 컴파일 하시고 포스팅 하시는 고생을 떠넘겨 드려서 죄송합니다 ^^;
@구차니 - 2009/01/07 09:51
답글삭제이 칼라 스킴은 어떤 분 블로그에서 그대로 업어온 겁니다.
디폴트 색보단 이게 더 예쁜 것 같아 업어왔는데, 그런 문제가 있군요. ㅠ.ㅠ
trackback from: 메모장2 (3.0.20.12) 궁극의 버전!!
답글삭제자꾸 버전업되어 좀 쑥스럽긴 하지만... 암튼...-_-;이번 버전은 어지간해선 더이상 손 볼 곳이 없을듯한 느낌이다.역시 삽질 전문가 구차니님과 컴파일 전문가 BLUEnLIVE님께서 수고해주셨다. (삽질기 6 / 7) np2j0ker.zip메모장2j0ker + 플러그인이 버전에 추가된 부분은 「메모장 대신 사용」이라는 메뉴항목이다.나머지 자세한 기능은 이 카테고리의 다른 글들에 소개되어 있으니 패쓰...요놈은 HKLM\SOFTWARE\Micro...
@구차니 - 2009/01/07 09:51
답글삭제떠넘기기 전쟁의 패자는 bluenlive님ㅋㅋㅋ
안녕하세요...
답글삭제노트패드2를 좋아하는 사람으로서 소스를 보고
공부도 해보고 싶은데... 소스를 얻을 수 있을까요?
가능하면 64bit로도 버전을 만들어보고 싶은 생각입니다.
처음에 구차니님한테 부탁을 드렸는데... 참여한 부분이
크게 없다고 소스를 넘길 권한이 없다며...
BLUEnLIVE님한테 부탁드려보라 하시더군요...
제 메일주소는 ammam41@gmail.com입니다.
@Notepad2팬 - 2009/01/09 15:14
답글삭제소스는 notepad2 홈페이지에 공개되어 있습니다.
64비트 컴파일용 패치까지 모두 올라와있으니, 그 쪽을 이용하시는 편이 좋을 것 같습니다.