none
window8 호환성 체크박스 활성화 질문입니다. RRS feed

  • 질문

  • 안녕하세요

    xp용 프로그램으로 windows8 에서 호환성문제가 생겼습니다.

    호환성 탭내에 호환성을 사용자가 직접 클릭하지않고 프로그램으로 처리하는 방법이 없을까요?

    2012년 12월 4일 화요일 오전 4:51

답변

  • 자문자답이네요

    하단 사이트에서 힌트얻어서 코딩하였습니다.

    sevenforums.com/tutorials/316-compatibility-mode.html

     OSVERSIONINFOEX osvi;
     BOOL bOsVersionInfoEx;
     ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
     osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
     bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*) &osvi);
     if(bOsVersionInfoEx)
     {
      //(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) // windows95, NT4.0
      //(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) // windows98
      //(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) // windowsME
      //(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) // windows2000
      //(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1) // windowsXP
      //(osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2) // windows2003 family
      //(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1) // windows7

      if(osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 2) // windows8 일때
      {
       leaf::CRegKey regkey;
       regkey.SetKey(leaf::CRegKey::_HKEY_CURRENT_USER,
       "Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers");

       std::string ProductType;
       std::string ProductFlag("~ WINXPSP3");
       char path[MAX_PATH];
       GetModuleFileNameA(NULL,path,MAX_PATH); // 현재 설치된 위치의 실행파일 경로 포함을 읽어

       if(!regkey.ReadString(path, ProductType)) // reg 에 없으면
       {
        regkey.WriteString(path, ProductFlag); // 저장한다
       }
      }
     }


    • 편집됨 ecoli987 2012년 12월 5일 수요일 오전 6:47 수정
    • 답변으로 표시됨 ecoli987 2012년 12월 5일 수요일 오전 6:49
    2012년 12월 5일 수요일 오전 6:45