제목에서 말한 걸 할려구 갖은 방법을 다 써봐도 잘 안되더군요...  

찾아낸 방법이 예전에 ActiveX 에서 자신을 포함한 웹브라우저를 찾는 방법을 이용하니 제대로 찾아지더군요..



다음은 코드입니다... 필요하신 분들 참고하시기 바랍니다.



    // Get IOleContainer interface pointer
    IOleContainer*  pContainer;
    hr = spDoc->QueryInterface(IID_IOleContainer, (void**)&pContainer);

    if(FAILED(hr) || pContainer == NULL)
        return FALSE;

    IServiceProvider *pISP = NULL;

    // Get IServiceProvider interface pointer.
    hr = pContainer->QueryInterface(IID_IServiceProvider, (void **)&pISP);
    pContainer ->Release();
    if(FAILED(hr) || pISP == NULL)
        return FALSE;

    // Get IWebBrowser2 interface pointer.
    hr = pISP->QueryService(IID_IWebBrowserApp, IID_IWebBrowser2, (void**)&pIExplorer);
    pISP->Release();
    if(FAILED(hr) || pIExplorer == NULL)
    {
        pIExplorer = NULL;
        return FALSE;
    }

Screen Saver를 동작 못하게 함.

Program Visual C++ 2007. 3. 22. 09:58 Posted by HisPark
XP환경에서 작업 중이었습니다.

PreTranslateMessage() 내에서

//Screen Saver를 동작 못하게 함.

VERIFY(SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, 0, 0));

//Screen Saver를 동작하게 함.

VERIFY(SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, 0, 0));



이 방법 외에 다른 방법.



SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT,0,m_uScrSaveTime,0);

SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, 0, NULL, 0);

//Screen Saver를 다시 초기화 함.

SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT,m_uScrSaveTime,NULL, 0);



위와 같은 함수를 사용하니 금방 해결되는군요.



WM_SYSCOMMAND, wParam == SC_SCREENSAVE 인 경우 화면보호기가 작동하는 것은 맞습니다만. 여기에 먼저 소개된 방법을 사용해선 화면보호기 종료 처리가 안되었습니다. (XP, Window 2000모두에서)



그럼 즐프하세요.

Visual C++ Release 디버깅2

Program Visual C++ 2007. 2. 28. 16:05 Posted by HisPark
우연히 얻었는데,..,...
쓸만하군요.

<요약> 어플리케이션을 릴리즈 모드로 Build 할 때 디버깅 정보를 남기어서 VC++ Debugging Tool에서 디버깅을 가능하게 합니다.
이 방법을 사용하는 경우, 실제 릴리즈 실행 파일은 거의 영향을 받지 않으면서,
디버그에서 브레이크 포인터를 잡거나, Trace를 가능하게 하므로,
릴리즈모드 에서만 발생하는 버그를 잡을수 있습니다.


<추가정보>
이 방법을 사용하게 되면 _DEBUG free define으로 포함되는 디버깅 메크로는 포함되지 않으나,
Source code안으로 Step in 가능하게 하는 디버깅 정보들은 OBJ와 PDB 파일에 남게 됩니다.
이를 이용하게 되면 VC++ IDE 환경에서 source level 까지의 step in이 가능해 집니다.


<방법>
1. Project를 open한뒤 menu 'Project/Settings'를 선택합니다.
2. 'Settings For'를 'Win32 Release'로 선택합니다.
3. 'C/C++' tab에서 'category'를 'General'로 선택하고 'Program Database'로 선택합니다.
4. 'Link' tab에서 'category'를 General'로 선택하고 'Generate debug info'를 체크합니다.
5. 'Rebuild All'를 실행하여서 프로그램을 다시 빌드 합니다.

이제 디버깅 하고자 하는 위치에 브레이크포인터를 잡고 'Go'를 실행하면,
디버깅을 진행할수 있습니다.

Visual C++ Release버전 디버깅

Program Visual C++ 2007. 2. 28. 15:57 Posted by HisPark
엄청 좋은 팁하나 알려드릴께요..
어디서 퍼온겁니다.

함 해보세요..


<릴리즈 버젼 실행시 런타임 에러 찾아내기>

릴리즈 버젼 실행시 에러가 났을 경우..참 곤란했죠.

물론 고수님들께서야 이미 알고계시겠지만..

나름대로 엄청 가슴이 아팠습니다. 디버그모드는 괜찮은데..릴리즈는 에러를 때리구..어디서 나는지조차 모
르겠구...그때 쓸만한 잼있는 방법입니다.(물론 모르는 분에 한해서..^^)



Step 1.

프로젝트 세팅 들어가면..

Link라는 탭 선택해서..보면

Generate Mapfile이라구 있을꺼랍니다.

고걸 선택해서 샥 돌려보면..map파일이 release디렉토리에 생기죠.



Step 2.

그리구 나선..에러를 만들어 돌려보고, 어느 주소에서 에러가 났는지 캡춰

그리구서 map파일에 있는 주소랑 매치해 보는겁니다.

그럼 어느 함수에서 에러가 났는지 알 수 있죠~

'Program Visual C++' 카테고리의 다른 글

Screen Saver를 동작 못하게 함.  (0) 2007.03.22
Visual C++ Release 디버깅2  (0) 2007.02.28
VCC source safe 사용법  (0) 2007.01.24
VC++ 확장자  (0) 2007.01.24
ActiveX 콘트롤 디버깅하기  (0) 2007.01.24