레지스트리에 쓰기 시작

void XXXX::OnBnClickedAutorunCheckbtn()
{
	//-----------------------------------------------
	//   HKEY_LOCAL_MACHINE//Software//Microsoft//Windows//CurrentVersion//Run
	//          ,        exe              
	//     ,         ,          .
	//
	// LONG RegOpenKeyEx(HKEY hKey, //            
	//                  LPCTSTR lpSubKey, //           
	//                  DWORD ulOptions, //   ,  0
	//                  REGSAM samDesired, //       ,      
	//                  PHKEY phkResult //            
	//                    )
	// RegSetValueEx:         ,        ,    .
    //-----------------------------------------------
	
	//   exe    .
	TCHAR tcExePath[MAX_PATH] = {0};
	::GetModuleFileName(NULL, tcExePath, MAX_PATH);

	//          .
#ifndef AUTORUN_APP_NAME
#define AUTORUN_APP_NAME        (TEXT("hgy test autorun"))
#else
#endif

	LPCTSTR lpSubKey = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
	HKEY hKey;
	if (m_AutoRun.GetCheck())
	{
	   if (ERROR_SUCCESS 
		   == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_WRITE, &hKey))
	   {
		   //         ,     ,
		   if (ERROR_SUCCESS ==  ::RegSetValueEx(hKey, AUTORUN_APP_NAME, 0, REG_SZ, (BYTE*)tcExePath, MAX_PATH))
		   {
		   }
		   else
		   {
			   AfxMessageBox(TEXT("    "));
		   }

		   ::RegCloseKey(hKey);
	   }
	}
	else
	{
#if 1   //    ,     ,     
		if (ERROR_SUCCESS 
			== ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_SET_VALUE, &hKey))
		{
		   ::RegDeleteValue(hKey, AUTORUN_APP_NAME);
		}
#endif

#if  0
		//     
		::ZeroMemory(tcExePath, MAX_PATH);

		if (ERROR_SUCCESS 
			== ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_WRITE, &hKey))
		{
			//         ,     
			if (ERROR_SUCCESS ==  ::RegSetValueEx(hKey, AUTORUN_APP_NAME, 0, REG_SZ, (BYTE*)tcExePath, MAX_PATH))
			{
			}
			else
			{
				AfxMessageBox(TEXT("    "));
			}

			::RegCloseKey(hKey);
		}
#endif
	}
}
m_AutoRun은 checkbox입니다. 이것은 응답 함수입니다.

좋은 웹페이지 즐겨찾기