-.ATL Module로 변경함
1.OCX에 있는 Interface 와 Events 는 그대로 살린다.
2.권한상승이 필요한 부분은 별도의 Interface를 만든다.
a.파일 및 폴더의 복사/삭제
b.HKLM 레지스트리의 제어(등록/수정/삭제)
c.메세지 전송(SendMessage, PostMessage, ...)
3.IsVista() 를 이용하여 윈도우의 버전이 Vista 이전버전인지를 체크하여
이전버전이면 기존의 코드를 그대로 사용하고
그렇지 않으면 권한상승시킨 Object의 Interface를 호출하여 처리한다.
-.레지스트리 등록파일(.rgs)에 다음 항목을 추가한다.
{
val DllSurrogate = s ''
}
Elevation
{
val Enabled = d 1
}
val LocalizedString = s'@ % M OD U L E % , - 1 0 1'
-.리소스파일(.rc) 에 다음 항목을 시작부분에 추가한다.
#define APP_MANIFEST 1
#define RT_MANIFEST 24
APP_MANIFEST RT_MANIFEST 파일명.확장자.manifest
-.ID가 101인 스트링 리소스가 있어야 한다.
-.ActiveX Object 변수가 전역변수로 되어 있으면 비스타 이상에서는
윈도우 창이 바뀌어도 그 값이 계속 남아 있어서
새롭게 권한상승된 Object를 구하지 않고 기존의 Object를 사용한다.
이로 인하여 Exe 파일에 다운로드해야할 파일의 정보가 전달되지 않는 문제가 발생한다.
이를 해결하기 위해서는 전역변수로 사용하지 않고
클래스의 멤버변수로 선언을 하여 사용하여야
윈도우창이 바뀔때마다 새로운 Object를 구하게 되고 정상적으로 작동을 한다.
출처: https://use1348.tistory.com/26 [유용한 정보:티스토리]
'유용한 정보' 카테고리의 다른 글
[C++]CPU Processor 갯수를 구함 (0) | 2024.12.26 |
---|---|
[기타] Dll 내의 함수 보기 (0) | 2024.12.26 |
[VC++]CWinThread 시작 및 종료 (0) | 2024.12.26 |
[VS2005] IE8 프로세스 디버깅하기 (0) | 2024.12.26 |
[VC++]IE8 설치 시 VS2005에서 발생하는 스크립트 에러 (0) | 2024.12.26 |