메뉴상에서 notepad.exe를 notepad2.exe로 대체 할 것인지에 대한 메뉴를 추가 하였다.
일단 사용한 함수는 RegSetValueEx 이다.

 
 LONG WINAPI RegSetValueEx(
   __in        HKEY hKey,
   __in_opt    LPCTSTR lpValueName,
   __reserved  DWORD Reserved,
   __in        DWORD dwType,
   __in_opt    const BYTE *lpData,
   __in        DWORD cbData
 );

기존에는 RegSetValue를 사용했었는데, 이 녀석은 Key , SubKey에 대해서 만 등록을 할 수 있지,
Value는 등록하지 못하므로 Value를 등록 할 수 있는 RegSetValueEx를 사용하게 되었다.

 RegSetValueExW(key1, L"Debugger", 0, REG_SZ, cmd, len * 2);
데이터는 위의 prototype를 보면 알겠지만,
"키,value name, 0, 변수 타입, value, 길이" 의 순서인데 reserved 값으로 0이 고정 되어 있다.

notepad2 프로젝트는 unicode로 되어 있으므로, 이에 대응하기 위해서 RegSetValueExW로 함수를 사용하였는데,
버그인지는 모르겠지만, len 부분에서 2배를 해주어야 만 제대로 value가 들어 가는 문제가 있었다.
2배라고 함은 unicode는 2byte 문자열이므로 이를 맞추어 주기 위해 2배가 된 것 같기는 하지만,
문자열이 unicode인데 길이만 따로 ascii 식으로 세어 준다는 것은 무언가의 문제가 있는 것으로 보인다.

그리고 prototype 상으로는 BYTE 타입의 문자열을 원하므로 Unicode 함수임에도 불구하고 warning을 출력한다.
--------------------Configuration: Notepad2 - Win32 Release--------------------
Compiling...
Notepad2.c
C:\cvsdown\np2src_VC6\src\Notepad2.c(2994) : warning C4133: 'function' : incompatible types - from 'unsigned short [264]' to 'const unsigned char *'
Linking...

Notepad2.exe - 0 error(s), 1 warning(s)


[출처 : http://msdn.microsoft.com/en-us/library/ms724923(VS.85).aspx]
신고
Posted by 구차니
TAG

댓글을 달아 주세요

  1. 뭔가 복잡해 보이는데 이전에 추가했던 메뉴랑 방법이 다른건가요??
    암튼 잘 되리라 믿슙니다. 구차니님 최~고!

    2009.01.04 23:37 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 외관상으로는 하나의 메뉴가 추가 되었을 뿐입니다 ^^
      일단 BLUE'nLIVE 님께 메일로 보내 드렸으니 곧 소식이 있으시겠지요. 혹시 불편하시다면 WinMerge 등의 비교 프로그램으로 직접 변경하시도록 소스를 직접 보내 드릴테니 메일을 부탁드리겠습니다.

      2009.01.05 00:13 신고 [ ADDR : EDIT/ DEL ]
    • 덕분에 기능 하나가 추가되었네요. 설치정보 파일은 제외하고 포스팅 했습니다^^ 고생하셨어요~

      2009.01.06 21:30 신고 [ ADDR : EDIT/ DEL ]
    • 수고 하셨습니다 ^^

      2009.01.06 21:49 신고 [ ADDR : EDIT/ DEL ]
  2. 지나가는 이

    수정해주신 노트패드2 열심히 쓰고 있답니다.
    공부도 할겸 64비트로 컴파일해보고 싶은데
    소스를 좀 얻을 수 있을까요?

    제 메일주소는 ammam41@gmail.com입니다.

    2009.01.09 11:39 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 제가 한 부분은 32비트용 VC++ 6.0 프로젝트로 변환된 소스에 레지스트리 부분만 추가 한거라서, 그 프로젝트 전체를 받으실려면 저 보다는 BLUE'nLIVE 님께 허락을 받으시는게 좋다고 생각을 합니다 ^^

      번거로우시더라도 http://bluenlive.net/ 에 가셔서 직접 부탁해보시기 바랍니다.

      2009.01.09 11:53 신고 [ ADDR : EDIT/ DEL ]