2010-06-30 8 views
0

J'essaie d'envoyer un message à une barre d'outils/barre d'outils IE, mais il semble que ma barre d'outils ne prend pas l'effet de message. Quelqu'un peut-il me dire où est la faute?sendmessage ne fonctionne pas

HRESULT CButtonDemoBHO::onDocumentComplete(IDispatch *pDisp, VARIANT *vUrl)  
{   
    m_hWnd = NULL; 
    SHANDLE_PTR nBrowser = NULL; 
    HRESULT hr = m_spWebBrowser2->get_HWND(&nBrowser); 
    m_hWnd = (HWND)nBrowser; 
    SendMessage(m_hWnd, WM_test, 0, 0); 
    return S_OK;  
} 

Répondre

2

Je stronly recommned que vous vérifiez les valeurs de hr et m_hWnd et la valeur de retour de sendmessage(). Je doute que "Envoyer un message ne fonctionne pas", mais je suis prêt à croire "mon message n'arrive pas". Êtes-vous sûr de l'envoyer à une destination valide?

0

Vous pouvez envelopper l'appel à SendMessage entre SetLastError() et GetLastError(), comme si ...

SetLastError(0); 
LRESULT rv = SendMessage(m_hWnd, WM_test, 0, 0); 
DWORD errCode = GetLastError(); 
if(errCode != ERROR_SUCCESS) { 
    // log error information here. 
} 

La valeur de retour de SendMessage dépend de ce que WM_test rendement de la fonction de traitement, donc je vérifierait la docs pour ce message aussi.

Vous pouvez généralement obtenir un message d'erreur lisible par l'utilisateur en transmettant le code d'erreur que GetLastError() renvoie en tant que paramètre dwMessageId dans FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ...).

FormatMessage docs.