Visual C++ BHO question

Discussion in 'C++' started by Dave King, Apr 21, 2007.

  1. Dave King

    Dave King Guest

    Hi All-

    I'm trying to customize this project ( http://www.codeproject.com/shell/IEMenuButton.asp
    ) and I'm getting an access voilation and was hoping somebody would be
    able to give me some idea

    Here's the method I'm trying to work with

    STDMETHODIMP CMasterObject::Exec(const GUID*, DWORD nCmdID, DWORD,
    VARIANTARG*, VARIANTARG*)
    {
    if(m_spUnkSite == 0 || m_pWebBrowser2 == 0) return S_OK;

    HRESULT hRes = S_OK;

    CComPtr<IDispatch> pDocDisp;
    CComQIPtr<IHTMLDocument2> pHtmlDoc2;

    hRes = m_pWebBrowser2->get_Document(&pDocDisp);
    if(SUCCEEDED(hRes) && pDocDisp)
    {
    hRes = pDocDisp->QueryInterface(IID_IHTMLDocument2,
    (void**)&pHtmlDoc2);
    if(SUCCEEDED(hRes) && pHtmlDoc2)
    {
    SHANDLE_PTR nBrowser = 0;
    m_pWebBrowser2->get_HWND(&nBrowser);
    HWND hWndParent = (HWND)nBrowser;

    POINT pt;
    GetCursorPos(&pt);

    HINSTANCE hInstance = _AtlBaseModule.GetModuleInstance();

    HMENU hMenu = LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU_POPUP));
    HMENU hMenuTrackPopup = GetSubMenu(hMenu, 0);

    if(hMenuTrackPopup && hWndParent)
    {
    BOOL bIsChevron = FALSE;
    HWND hWndMenuParent = NULL;
    HWND hWndToolBar = NULL;

    hWndMenuParent = hWndParent;
    hWndToolBar = WindowFromPoint(pt);

    if(m_bIsIe7)
    {
    HWND hWndIe7ActiveTab = hWndParent;
    HWND hWnd = GetWindow(hWndParent, GW_CHILD);

    // looking for the Internet Explorer_Server window
    // this window should be a parent for TrackPopupMenu
    if(hWnd)
    {
    TCHAR szClassName[MAX_PATH];
    while(hWnd)
    {
    memset(szClassName,0,MAX_PATH);
    GetClassName(hWnd, szClassName, MAX_PATH);
    if(_tcscmp(szClassName,_T("TabWindowClass"))==0)
    {
    // the active tab should be visible
    if(IsWindowVisible(hWnd))
    {
    hWnd = GetWindow(hWnd, GW_CHILD);
    while(hWnd)
    {
    memset(szClassName,0,MAX_PATH);
    GetClassName(hWnd, szClassName, MAX_PATH);

    if(_tcscmp(szClassName,_T("Shell DocObject View"))==0)
    {
    hWnd = FindWindowEx(hWnd, NULL, _T("Internet
    Explorer_Server"), NULL);
    if(hWnd) hWndIe7ActiveTab = hWnd;
    break;
    }
    hWnd = GetWindow(hWnd, GW_HWNDNEXT);
    }
    }
    }
    hWnd = GetWindow(hWnd, GW_HWNDNEXT);
    }
    }

    if(hWndIe7ActiveTab) hWndMenuParent = hWndIe7ActiveTab;
    }

    int nIDCommand = -1;
    BOOL bRightAlign = FALSE;
    if(hWndToolBar)
    {
    ScreenToClient(hWndToolBar,&pt);
    int nButton = (int)::SendMessage(hWndToolBar, TB_HITTEST, 0,
    (LPARAM)&pt);
    if(nButton>0)
    {
    TBBUTTON pTBBtn;
    memset(&pTBBtn,0,sizeof(TBBUTTON));
    if:):SendMessage(hWndToolBar, TB_GETBUTTON, nButton,
    (LPARAM)&pTBBtn))
    {
    nIDCommand = pTBBtn.idCommand;
    RECT rcButton;
    if:):SendMessage(hWndToolBar,TB_GETRECT,nIDCommand,
    (LPARAM)&rcButton))
    {
    pt.x = rcButton.left;
    pt.y = rcButton.bottom;
    ClientToScreen(hWndToolBar,&pt);

    RECT rcWorkArea;
    SystemParametersInfo(SPI_GETWORKAREA,0,(LPVOID)&rcWorkArea,0);
    if(rcWorkArea.right-pt.x<150)
    {
    bRightAlign = TRUE;
    pt.x = rcButton.right;
    pt.y = rcButton.bottom;
    ClientToScreen(hWndToolBar,&pt);
    }
    }
    }
    }
    else
    {
    GetCursorPos(&pt);
    bIsChevron = TRUE;
    }
    }

    UINT nFlags = TPM_NONOTIFY|TPM_RETURNCMD|TPM_LEFTBUTTON;
    if(bRightAlign) nFlags |= TPM_RIGHTALIGN;
    else nFlags |= TPM_LEFTALIGN;

    // draw pressed button
    if(nIDCommand!=-1 && !bIsChevron) ::SendMessage(hWndToolBar,
    TB_PRESSBUTTON, nIDCommand, MAKELPARAM(1,0));
    // popup the menu
    int nCommand = TrackPopupMenu(hMenuTrackPopup, nFlags, pt.x, pt.y,
    0, hWndMenuParent, 0);
    // release the button
    if(nIDCommand!=-1 && !bIsChevron) ::SendMessage(hWndToolBar,
    TB_PRESSBUTTON, nIDCommand, MAKELPARAM(0,0));

    switch (nCommand)
    {
    case ID_ITEM1:
    MessageBox(hWndParent,_T("Item 1 is
    selected"),_T("TestExtension"), MB_OK|MB_ICONEXCLAMATION);
    break;
    case ID_ITEM2:
    MessageBox(hWndParent,_T("Item 2 is
    selected"),_T("TestExtension"), MB_OK|MB_ICONEXCLAMATION);
    break;
    case ID_ABOUT:
    MessageBox(hWndParent,_T("TestExtension 1.0\nCopyright © 2006
    Igor Tolmachev\nhttp://www.itsamples.com"), _T("TestExtension"), MB_OK|
    MB_ICONINFORMATION);
    break;
    }
    }
    }
    }
    return S_OK;
    }


    Basically I need to get the URL of the website that's in IE's window
    and I'm getting an access violation error when I do it. I'm putting
    this right before "switch (nCommand)"

    pHtmlDoc2->get_URL(pURL);
    BSTR outURL = *pURL;
    _bstr_t(sURL);

    This works sometimes but not others. I'm not sure if it's because the
    page hasn't fully loaded or what it is, but I'd like to get it to work
    all the time.

    Thanks,
    Dave
     
    Dave King, Apr 21, 2007
    #1
    1. Advertising

  2. Dave King

    Dave King Guest

    Sorry I just realized I posted wrong, I've been trying lots of stuff
    and it's late, anyways, this is what my part of the code should look
    like

    pHtmlDoc2->get_URL(pURL);
    BSTR outURL = *pURL;
    _bstr_t sURL(outURL);
     
    Dave King, Apr 21, 2007
    #2
    1. Advertising

  3. Dave King

    Ian Collins Guest

    Dave King wrote:
    > Sorry I just realized I posted wrong, I've been trying lots of stuff
    > and it's late, anyways, this is what my part of the code should look
    > like
    >
    > pHtmlDoc2->get_URL(pURL);
    > BSTR outURL = *pURL;
    > _bstr_t sURL(outURL);
    >

    This realy should go to a windows programming group.

    --
    Ian Collins.
     
    Ian Collins, Apr 21, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. John Timbers
    Replies:
    32
    Views:
    1,444
    Alvin Bruney
    Nov 8, 2003
  2. wh
    Replies:
    2
    Views:
    605
    Cowboy \(Gregory A. Beamer\)
    Jan 16, 2004
  3. Rob Meade
    Replies:
    2
    Views:
    405
    Rob Meade
    May 22, 2004
  4. M P
    Replies:
    6
    Views:
    571
    Joe Fallon
    Aug 7, 2004
  5. Ily
    Replies:
    2
    Views:
    975
    =?Utf-8?B?ZGhucml2ZXJzaWRl?=
    Aug 3, 2005
Loading...

Share This Page