이 블로그 검색

2014년 6월 15일 일요일

레지스트리 시작프로그램 등록

//////////////////////////////////////////////////////////
//  Function Name  
//      SetRegistyStartProgram
//
//  Parameters 
//      bAutoExec[in]     : TRUE이면 시작프로그램 레지스트리에 등록, FALSE면 해제
//      lpValueName[in]   : 설정할 값의 이름
//      lpExeFileName[in] : 실행시킬 프로그램 Full 경로 (NULL 일수 있음, 단, bAutoExec값이 FALSE이여야 함)
//
//  Return Values
//      시작프로그램 레지스트리에 등록/헤제 성공이면 TRUE, 실패면 FALSE     
//
BOOL CAutoRunProgramDlg::SetRegistyStartProgram(BOOL bAutoExec, LPCSTR lpValueName, LPCSTR lpExeFileName)
{
    HKEY hKey;
    LONG lRes;
    if(bAutoExec)
    {
        if(lpValueName == NULL || lpExeFileName == NULL)
            return FALSE;
  //lRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0L, KEY_ALL_ACCESS, &hKey);
  //lRes = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0L, KEY_WRITE, &hKey);
  lRes = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0L, KEY_WRITE, &hKey);
        if( lRes == ERROR_SUCCESS )
        {
   lRes = ::RegSetValueEx(hKey, lpValueName, 0, REG_SZ, (BYTE*)lpExeFileName, lstrlen(lpExeFileName)); 
   ::RegCloseKey(hKey);
   if(lRes == ERROR_SUCCESS) 
    AfxMessageBox("성공적으로 시작 프로그램에서 등록됐습니다.");
   else
   {
    AfxMessageBox("Error");
    return FALSE;
   }
  }
  else if(lRes == ERROR_ACCESS_DENIED)
  {
   AfxMessageBox("이 소프트웨어를 설치하기 위해서는 이 컴퓨터에 대한 충분한 권한이 있어야 합니다.");
   return FALSE;
  }
  else
  {
   AfxMessageBox("Error");
   return FALSE;
  }
    }
    else 
    {
  lRes = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hKey);
        if( lRes != ERROR_SUCCESS )
  {
   return FALSE;
  }
        lRes = RegDeleteValue(hKey, lpValueName);      
        RegCloseKey(hKey);
        if(lRes == ERROR_SUCCESS) 
   AfxMessageBox("성공적으로 시작 프로그램에서 삭제됐습니다.");
  else if(lRes == ERROR_FILE_NOT_FOUND)
  {
   AfxMessageBox("프로그램이 시작 프로그램에 등록되어 있지 않습니다.");
   return FALSE;
  }
  else
  {
   AfxMessageBox("시작 프로그램에서 삭제하지 못했습니다.");
   return FALSE;
  }
    }

    return TRUE;


ex >

 SetRegistyStartProgram(TRUE, "AAA", "C:\\Test\\A.exe");    // 등록
 SetRegistyStartProgram(FALSE, "AAA", NULL);    // 해제

댓글 없음:

댓글 쓰기