Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Visual C++ BHO question

Reply
Thread Tools

Visual C++ BHO question

 
 
Dave King
Guest
Posts: n/a
 
      04-21-2007
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)&rc WorkArea,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

 
Reply With Quote
 
 
 
 
Dave King
Guest
Posts: n/a
 
      04-21-2007
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);



 
Reply With Quote
 
 
 
 
Ian Collins
Guest
Posts: n/a
 
      04-21-2007
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.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Trojan BHO.AL The Rifleman Computer Support 3 11-01-2007 11:13 AM
Internet Explorer Browser Extension: Switching from Live to Development and back again with a browser extension or BHO--how to create it? Danny Javascript 11 06-27-2007 01:50 PM
BHO Question yar Computer Security 2 09-23-2005 04:11 PM
Trojan.downloader.BHO.req - how to remove Martinez Computer Support 3 08-28-2005 05:16 PM
Trivial question - Visual C# .Net vs Visual Studio .Net John Timbers ASP .Net 32 11-08-2003 06:12 AM



Advertisments