아래는 frhed 프로그램의 레지스트리 등록 부분의 소스이다.
notepad2의 아쉬운점이 컨텍스트 메뉴를 지원하지 않는 다는 점이었는데, 이 부분을 응용하여 적용하면
notepad2의 효용이 200배는 증가 할 듯 하다.
case IDM_CONTEXT: if (MF_CHECKED == GetMenuState(hMenu, IDM_CONTEXT, 0)) { //WinNT requires the key to have no subkeys RegDeleteKey(HKEY_CLASSES_ROOT, "*\\shell\\Open in frhed\\command"); RegDeleteKey(HKEY_CLASSES_ROOT, "*\\shell\\Open in frhed"); } else { HKEY key1; LONG res = RegCreateKey(HKEY_CLASSES_ROOT, "*\\shell\\Open in frhed\\command", &key1); if (res == ERROR_SUCCESS) { char cmd[MAX_PATH]; int len = sprintf(cmd, "%s %%1", _pgmptr); RegSetValue(key1, NULL, REG_SZ, cmd, len); } } break; case IDM_UNKNOWN: if (MF_CHECKED == GetMenuState(hMenu, IDM_UNKNOWN, 0)) { HKEY hk; //WinNT requires the key to have no subkeys RegDeleteKey(HKEY_CLASSES_ROOT, "Unknown\\shell\\Open in frhed\\command"); RegDeleteKey(HKEY_CLASSES_ROOT, "Unknown\\shell\\Open in frhed"); if (ERROR_SUCCESS == RegOpenKey(HKEY_CLASSES_ROOT, "Unknown\\shell", &hk)) { RegDeleteValue(hk, NULL); RegCloseKey(hk); } } else { HKEY key1; LONG res = RegCreateKey(HKEY_CLASSES_ROOT, "Unknown\\shell\\Open in frhed\\command", &key1); if (res == ERROR_SUCCESS) { char cmd[MAX_PATH]; int len = sprintf(cmd, "%s %%1", _pgmptr); RegSetValue(key1, NULL, REG_SZ, cmd, len); } } break; case IDM_DEFAULT: if (MF_CHECKED == GetMenuState(hMenu, IDM_DEFAULT, 0)) { HKEY hk; if (ERROR_SUCCESS == RegOpenKey(HKEY_CLASSES_ROOT, "Unknown\\shell", &hk)) { RegDeleteValue(hk, NULL); RegCloseKey(hk); } } else { RegSetValue(HKEY_CLASSES_ROOT, "Unknown\\shell", REG_SZ, "Open in frhed", 13); } break; |
notepad2의 아쉬운점이 컨텍스트 메뉴를 지원하지 않는 다는 점이었는데, 이 부분을 응용하여 적용하면
notepad2의 효용이 200배는 증가 할 듯 하다.
'Programming > C Win32 MFC' 카테고리의 다른 글
The C Library Reference Guide (0) | 2009.02.24 |
---|---|
warning: array subscript has type ‘char’ (0) | 2009.01.02 |
Windows Registry 관련 함수 (0) | 2008.12.30 |
현재 실행파일이 있는 경로 알아 내기 - How to get full path of executed current file(not current directory) (2) | 2008.12.26 |
File 길이 알아내기 (2) | 2008.10.29 |