'RegCreateKeyEx'에 해당되는 글 1

  1. 2008.11.15 오른쪽 버튼 메뉴에 프로그램 추가하기 2
오른쪽 버튼 메뉴에 프로그램을 추가하는 동작은,
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"));