ActiveX 설치시에 CAB 파일내의 EXE 파일 실행하기

[version]
; version signature (same for both NT and Win95) do not remove
signature="$CHICAGO$"
AdvancedINF=2.0

[Add.Code]
MessengerApp.INF=MessengerApp.INF

[MessengerApp.INF]
file-win32-x86=thiscab

[Setup Hooks]
hook=hook

[hook]
run=%EXTRACT_DIR%\MessengerApi.exe /s

[Setup Hooks]에 실행할 파일명을 넣어주면 된다. 이때 CAB 파일을 묶을때 INF 파일도 같이 포함하도록 한다.

ActiveX 서명 과정 자동화

출처 : http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&wid=327

 

ActiveX 서명을 위해서, 보통 사용되어지는 툴이 signcode.exe 이죠. 이 도구를 이용해서 다음과 같은 식의 명령행 인자로
ActiveX 에 대해 서명을 하게 됩니다.

signcode /spc myCertificate.spc /v myKey.pvk myactivex.dll

signcode.exe 에는 한가지 단점이 있지요. 바로 암호를 명령행에서 입력할 수 없고, 반드시 위와 같이 실행한 다음에 나오는 팝업창에
입력을 해야 하는 불편함이 있습니다. 이런 부분이, “자동 빌드” 구현에 가서는 불편함의 정도를 넘어서게 되지요. 그것 때문에 절름발이식 자동
빌드가 되어버리니까요.

일단, ActiveX 에 대한 서명까지 자동화하기 위해서는 signcode.exe 는 버리셔야 하고요. 대신에 .NET 2.0 SDK 에 포함된
signtool.exe 를 사용하셔야 합니다. VS.NET 2005 가 설치된 경우 다음의 경로에 있습니다.…

Web으로부터 ActiveX 컨트롤을 다운받아서 실행하는 VC 예제

VC에서도 Internet Explorer처럼 웹에서 ActiveX를 다운로드 받아서 실행(ocx, cab)시키는 방법이 있더군요. 기본적으로 IBindStatusCallback을 사용하여 다운로드를 진행하고 CoGetClassObjectFromURL()함수를 이용하여 ClassFactory를 얻어오게 되어있습니다. 다운로드가 완료되면 CWnd::CreateControl()을 이용하여 CWnd에 Attatch되는군요.
urlobj.zip

IWebBrowser2와 IHTMLDocument2의 상호변환

1. IWebBrowser2 에서 IHTMLDocument2 인터페이스 구하기

IWebBrowser2 *m_pWebFromUnknown;
IWebBrowser2 *m_pWebFromDoc;

STDMETHODIMP CTestObj::SetSite( IUnknown *pUnkSite )
{
    IOleClientSite *pClientSite;
    HRESULT hr;

    hr = pUnkSite-> QueryInterface( IID_IOleClientSite, 
    (LPVOID *)&pClientSite );
    if ( FAILED( hr ) ) return S_OK;

    IOleContainer *pContainer;
    hr = pClientSite-> GetContainer( &pContainer );
    pClientSite-> Release();
    if ( FAILED( hr ) ) return S_OK;
    
    IServiceProvider *pServiceProvider;
    hr = pContainer-> QueryInterface( IID_IServiceProvider, 
    (LPVOID *)&pServiceProvider );
    pContainer-> Release();
    if ( FAILED( hr ) ) return S_OK;

    hr = pServiceProvider-> QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (LPVOID *)
                                         &m_pWebFromUnknown );
    pServiceProvider-> Release();
    if ( FAILED( hr ) ) return S_OK;

    LPDISPATCH pDocDisp;
    hr = m_pWebFromUnknown-> get_Document( &pDocDisp 

ActiveX 컨트롤 배포시 설치 여부 판단용 자바스크립트

function DetectActiveXControl()
{
    try
    {
        var xObj = new ActiveXObject("XControl.X");

        if(xObj)
            Installed = true;
        else
            Installed = false;
    }
    catch(ex)
    {
        Installed = false;
    }

    if(Installed == true)
    {
        alert("ActiveX Control이 설치됫네 *^^*");
    }
    else
    {
        alert("ActiveX Control이 설치되지 않았네 -_-");
        window.location.reload();
    }
}