Programming/C Win32 MFC2008. 12. 18. 13:41
아래는 frhed 프로그램의 레지스트리 등록 부분의 소스이다.

    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배는 증가 할 듯 하다.
Posted by 구차니