Thinking Different





내가 만든 프로그램의 특정 확장자에 대한 아이콘을 등록하고 싶은 경우 아래와 같이 한다

HKEY_CLASSES_ROOT     바로 밑에 자신의 확장자명과 확장자명의 본체를 키로 등록한다 (예:.xxy)

ㄴ.xxy                        -> 문자열 기본값 : 확장자의 본체 키를 쓴다 (myProgram.xxy)

ㄴmyProgram.xxy     :   이 키에서 다시 하위 키를 포함한다 

      ㄴ shell\\Open\\Command        -> 문자열 기본값 : 바로 실행할 exe 경로를 등록한다
                                                              (.xxy라는 확장자를 가지는 아이콘을 더블 클릭 했을 경우 그 확
                                                                장자를 구동할 수 있는 본체 프로그램 exe를 말한다)

      ㄴ DefaultIcon       -> .xxy 확장자의 아이콘을 지정한다. 보통 리소스dll (리소스 DLL 생성방법 참조)
                                     나 exe에서 아이콘을 지정하는 경우가 대부분이다.


확장자를 수동으로 등록하는 경우나 코드에서 등록했을때는 재부팅 전에는 제대로 볼수가 없다. 쉘이 인식을 하지 않기 때문인데 이때 변경 쉘 통지 메시지를 날려주면 Refresh 되면서 재부팅 하지 않고도 인식이 가능하다. 아이콘 갱신 함수는 아래와 같다

// 변경 쉘 통지 (아이콘 갱신)
// SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);


즉, 위의 레지스트리 문자열 키 및 값을 c++로 등록부분을 작성한 후 맨 아래에 쉘 통지 SHChangeNotify를 써주어야 갱신이 된다.

어때요 참 쉽죠~