오른쪽 버튼 메뉴에 프로그램을 추가하는 동작은,
HKEY_CLASSES_ROOT\*\shell 키 아래에서 특정 형식에 맞도록 서브키를 작성하는 것으로 간단히 해결됩니다.
(특정 확장자에 대한 행동을 지정하고 싶으시면 '*' 대신 '.txt' 와 같이 지정하시면 됩니다)

필요한 동작은 다음과 같습니다:
1. HKEY_CLASSES_ROOT\*\shell 키를 만든다.
2. 오른쪽 버튼 메뉴에 나타내고자 하는 이름으로 서브키를 만든다.
3. 작성된 서브키의 아래에 'command' 라는 서브키를 만들고, 기본값의 데이터를
    실행하고자 하는 프로그램으로 지정한다.

따라서, 코드는 다음과 같이 됩니다.

BOOL AddToShellContext(LPCTSTR ptszDisplayName,
			LPCTSTR ptszCommand)
{
	DWORD dwRet = ERROR_SUCCESS;
	BOOL bRet = TRUE;

	HKEY hShellKey, hNameKey, hCmdKey;

	dwRet = RegCreateKeyEx(HKEY_CLASSES_ROOT,
				_T("*\\shell"),	0, NULL,
				REG_OPTION_NON_VOLATILE,
				KEY_WRITE, NULL,
				&hShellKey, NULL);
	if (dwRet != ERROR_SUCCESS)
	{
		bRet = FALSE;
		goto cleanup;
	}

	dwRet = RegCreateKeyEx(hShellKey, 
				ptszDisplayName, 0, NULL, 
				REG_OPTION_NON_VOLATILE,
				KEY_WRITE, NULL,
				&hNameKey, NULL);
	if (dwRet != ERROR_SUCCESS)
	{
		bRet = FALSE;
		goto cleanup;
	}

	dwRet = RegCreateKeyEx(hNameKey,
				_T("command"), 0, NULL,
				REG_OPTION_NON_VOLATILE,
				KEY_WRITE, NULL,
				&hCmdKey, NULL);
	if (dwRet != ERROR_SUCCESS)
	{
		bRet = FALSE;
		goto cleanup;
	}

	dwRet = RegSetValueEx(hCmdKey,
				NULL, 0, REG_SZ,
				(LPBYTE)ptszCommand,
				_tcslen(ptszCommand));
	if (dwRet != ERROR_SUCCESS)
	{
		bRet = FALSE;
		goto cleanup;
	}


cleanup:
	RegCloseKey(hShellKey);
	RegCloseKey(hNameKey);
	RegCloseKey(hCmdKey);

	return bRet;
}
물론, 이렇게 호출하시면 되겠죠? ^^;
AddToShellContext(_T("메모장으로 열기"), _T("notepad %1"));


바탕화면에 인터넷 바로가기 만들기

CuveDev | 2008. 11. 14. 16:16 | 큐브씨
(Last Modified: 2008.11.17 10:22)

사실 '인터넷 바로가기 아이콘'은 그냥 평범한 INI 형식의 텍스트 파일입니다 ^^;
(실행파일 바로가기 아이콘은 조금 다릅니다.. ;;)
따라서 다음과 같이 코딩하는 것만으로 간단히 인터넷 바로가기를 만들 수 있습니다.

BOOL CreateShortcut(LPCTSTR ptszURL,
			LPCTSTR ptszIconPath,
			LPCTSTR ptszShortcutName)
{
	BOOL Res = TRUE;

	Res &= WritePrivateProfileString(_T("InternetShortcut"),
			_T("URL"), ptszURL, ptszShortcutName);
	Res &= WritePrivateProfileString(_T("InternetShortcut"),
			_T("IconFile"), ptszIconPath, ptszShortcutName);
	Res &= WritePrivateProfileString(_T("InternetShortcut"),
			_T("IconIndex"), _T("1"), ptszShortcutName); 

	return Res;
}


한 바이트의 비트를 역순으로 변경하는 간단한(?) 매크로.

#define reverse(b1) ((b1 * 0x0802LU & 0x22110LU) | (b1 * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;


영민이 돌잔치에 초대합니다!

CuveStyle | 2008. 10. 17. 12:44 | 큐브씨

 제 아들 영민이가 벌써 한 살이 되어서..

 여러 분들을 모시고 축하의 말씀 듣고자 합니다 ^^

 오는 11월 1일(토) 12:30, 미금역 리더스클럽에서 돌잔치를 할 예정입니다.

 차를 가지고 오시면 3시간 무료 주차가 가능하다네요.

 

 직접 찾아뵙지 못하고 이렇게 포스팅으로 대신하는 점 양해 부탁드리며..

 당일날 많은 분들을 뵐 수 있다면 좋겠습니다.

 참석가능하신 분께서는.. 답글을 달아주시거나 저한테 연락을 주시면..

 저희가 미리 준비하는데 큰 도움이 되겠습니다 ^^;


Windows 개발자가 가야할 길은?

CuveDev | 2008. 3. 16. 05:17 | 큐브씨
개발자?

개발자?

출처 : 김국현의 낭만 IT

저는 Windows 개발자입니다(헉.. 죄송합니다 코더입니다 ㅠ_ㅠ).
Win32 API와 MFC를 주력으로, 가끔 WinForm 기반으로 개발을 진행해야 할 때도 있습니다.

요즘같이 기업 인트라넷 및 업무 시스템들,
심지어 오피스나 일정간리 프로그램마저 웹 인터페이스로 만들어지는 세상에서,
문득 어떤 미래를 바라보고 실력을 쌓아야 할까, 하는 생각에 조금 생각한 바를 남겨봅니다.
일단은 국내 기준으로요.. =_=;

먼저 가장 Windows 개발자 수요가 많은 부문은, 역시 게임 프로그래머겠지요.
한창 온라인게임들이 창궐하던 시대는 지났지만,
아마 여전히 Windows 개발자들을 가장 많이 원하고 있는 분야가 아닐까 합니다.
DirectX 계열 기술들을 추가로 공부해야 할 것이고, 최근에는 닷넷으로도 개발되는 게임도 있는 것 같더군요.
일단 뭐 게임개발자가 된다고 하면, 어디서든 먹고사는데는 문제는 없을 것 같지만..
혼자서 뭔가 만들어낸다던가, 프리랜서가 된다거나 하는 꿈은 접어야 할지도 모르겠네요.

다음으로 생각나는 것은 디바이스 드라이버나 임베디드 개발자인데요,
이쪽 부문 역시 수요에 비해 공급이 상당히 부족하다고 생각됩니다만..
세상의 모든 제품에 컴퓨터가 들어간다는 추세를 생각해 본다면
상당히 해볼만한 분야라고 생각됩니다.
소문을 들어보니 공부는 상당히 좀 해야될 것 같지만요 ^^;
비슷한 쪽으로 모바일 쪽도 있겠습니다만, 이쪽은 잘 모르겠습니다 ㅡㅡ;

세 번째로는, 솔루션개발자가 있겠네요..  제가 지금 몸담고 있는 분야입니다.
백신/안티스파이웨어/메신저/증권거래시스템/금융거래시스템 정도가 언뜻 떠오르는군요.
사실 아시다시피 우리나라에서 성공했다고 할만한 솔루션은 손으로 꼽을 정도라..
베스트 케이스로 삼을 만한 사례가 없다는게 좀 문제겠네요..
하지만 뭐 틈새시장을 노리고 창업을 생각한다면 이쪽도 하나의 방법이라고 생각합니다.
그렇게 시작하셔서, 국내의 Adobe나 MS와 같은 굴지의 기업을 만들어 나가시는것도..

생각나는데로 써 봤습니다만, 저랑 다르게 생각하실 분들이 많은 것 같습니다.
여러분들은 어떤 쪽을 염두에 두고 계신가요?
이 글은 남겨주신 의견에 따라 계속 수정됩니다 =ㅁ= 잘 부탁드려요!