BHO Griff OnSubmit Veranstaltung
-
07-07-2019 - |
Frage
Grundsätzlich möchte ich ein BHO entwickeln, die bestimmte Felder auf einem Formular und Auto-Orte Wegwerf-E-Mails in den entsprechenden Feldern (mehr für mein eigenes Wissen) validiert. So im Fall DocumentComplete' Ich habe diese:
for(long i = 0; i < *len; i++)
{
VARIANT* name = new VARIANT();
name->vt = VT_I4;
name->intVal = i;
VARIANT* id = new VARIANT();
id->vt = VT_I4;
id->intVal = 0;
IDispatch* disp = 0;
IHTMLFormElement* form = 0;
HRESULT r = forms->item(*name,*id,&disp);
if(S_OK != r)
{
MessageBox(0,L"Failed to get form dispatch",L"",0);// debug only
continue;
}
disp->QueryInterface(IID_IHTMLFormElement2,(void**)&form);
if(form == 0)
{
MessageBox(0,L"Failed to get form element from dispatch",L"",0);// debug only
continue;
}
// Code to listen for onsubmit events here...
}
Wie würde ich verwenden, um die IHTMLFormElement Schnittstelle für das onsubmit Ereignis zu hören?
Lösung
Wenn Sie den Zeiger auf das Element haben Sie versenken Ereignisse wollen, würden Sie es für QueryInterface()
IConnectionPointContainer
und dann eine Verbindung zu, dass:
REFIID riid = DIID_HTMLFormElementEvents2;
CComPtr<IConnectionPointContainer> spcpc;
HRESULT hr = form->QueryInterface(IID_IConnectionPointContainer, (void**)&spcpc);
if (SUCCEEDED(hr))
{
CComPtr<IConnectionPoint> spcp;
hr = spcpc->FindConnectionPoint(riid, &spcp);
if (SUCCEEDED(hr))
{
DWORD dwCookie;
hr = pcp->Advise((IDispatch *)this, &dwCookie);
}
}
Einige Hinweise:
- Sie wollen wahrscheinlich
dwCookie
undcpc
zwischenzuspeichern, da Sie sie später benötigen, wenn Siepcp->Unadvise()
rufen Sie das Waschbecken trennen. - In der Anruf oben
pcp->Advise()
, gebe ich diese. Sie können jedes Objekt nutzen, müssen dieIDispatch
implementiert, die oder nicht diese Aufgabe sein kann. Design links zu dir. -
riid
wird das Ereignis dispinterface Sie versenken wollen. In diesem Fall möchten Sie wahrscheinlichDIID_HTMLFormElementEvents2
.
Hier ist, wie zu trennen:
pcp->Unadvise(dwCookie);
Lassen Sie mich wissen, wenn Sie weitere Fragen haben.
Edit-1:
Ja, das DIID war falsch. Es sollte sein:. DIID_HTMLFormElementEvents2
Hier ist, wie ich fand es:
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK>findstr /spin /c:"Events2" *.h | findstr /i /c:"form"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow