Перехват нажатия на submit.

Тема в разделе "WASM.WIN32", создана пользователем asmic, 22 июл 2007.

  1. asmic

    asmic New Member

    Публикаций:
    0
    Регистрация:
    19 фев 2007
    Сообщения:
    85
    Добрый вечер. Я что не могу понять. Как перехватить нажатие на submit. Я предпологаю что это делается с помощью IHTMLFormElement::get_onsubmit. Я прав? Если нет, то с помощью чего? Заранее спасибо.
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    DWebBrowserEvents2::BeforeNavigate2 в общем случае.

    onsubmit и прочие обработчики on* - это пользовательские обработчики, вешаемые на события, - яваскриптом, например. Который вполне может обходиться и без него, назначив form.submit какому-то другому событию.
     
  3. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    asmic
    Попробуй поискать статью coban2k'а "Перехват данных форм Internet Explorer'а", там есть все (практически), что ты спрашивал на форуме по СОМ
     
  4. asmic

    asmic New Member

    Публикаций:
    0
    Регистрация:
    19 фев 2007
    Сообщения:
    85
    Добрый день. Да, я уже читал стаью coban2k. Но я все еще не могу понять. Как реализовать часть его кода на ассемблере в частности ( все что касается установки обработчиков событий, и перехвата самих событий ). Буду разбиратся. Думаю что возникнет куча вопросов.
     
  5. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    asmic
    Как работать с COM на ассемблере есть статьи здесь же.
     
  6. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    Mental_Mirror
    ну я примеру по этим мануалам нифига не смог сделать, там ж не рассказывается как соединять интерфейсы ... и вабще QueryIntarface в обработчике тож больная тема ...

    вот я даж не знаю правильно я сделал или нет ... на си рабочий ...

    Код (Text):
    1. HRESULT __stdcall CShellWindowsEvents::QueryInterface(REFIID riid, void** ppv) {
    2.     if (riid == IID_IUnknown)
    3.         *ppv = static_cast<DShellWindowsEvents*>(this);
    4.     else if (riid == IID_IDispatch)
    5.         *ppv = static_cast<IDispatch*>(this);
    6.     else if (riid == DIID_DShellWindowsEvents)
    7.         *ppv = static_cast<DShellWindowsEvents*>(this);
    8.     else {
    9.         *ppv = NULL;
    10.         return E_NOINTERFACE;
    11.     }
    12.     reinterpret_cast<IUnknown*>(*ppv)->AddRef();
    13.     return S_OK;
    14. }
    и вот мой на асме ...

    Код (Text):
    1. proc    CShellWindowsEvents_QueryInterface,pi,iid,ppvObject
    2.     invoke  IsEqualGUID,[iid],IID_IUnknown
    3.     test    eax,eax
    4.     jnz .int
    5.     invoke  IsEqualGUID,[iid],IID_IDispatch
    6.     test    eax,eax
    7.     jnz .int
    8.     invoke  IsEqualGUID,[iid],DIID_DShellWindowsEvents
    9.     test    eax,eax
    10.     jnz .int
    11.     xor eax,eax
    12.     mov edx,[ppvObject]
    13.     mov [edx],eax
    14.     mov eax,E_NOINTERFACE
    15.     ret
    16. .int:   mov eax,[pi]
    17.     mov edx,[ppvObject]
    18.     mov [edx],eax
    19.     mov edx,[ppvObject]
    20.     mov edx,[edx]
    21.     mov edx,[edx]
    22.     mov eax,[ppvObject]
    23.     push    dword[eax]
    24.     call    dword[edx+Addref]
    25.     mov eax,S_OK
    26.     ret
    27. endp
    да и вабще объекты эти еще та замануха ... сложно для понимания ...
     
  7. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    el-
    Почитай на code-project - "Plain C COM Application", воткнешь со временем...Опять же объекты - это не больше как таблицы указателей на функции.
     
  8. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    Mental_Mirror
    спасибо почитаю, арт смотрю подробный ...

    ну про объекты я вродь понял из васмовских артиклей ... тока я ни в чем не уверен по поводу КОМ, ну собственно мой пример ...

    Код (Text):
    1. struct  Object
    2.     IDispatch           dd  ?
    3.     g_Counter           dd  ?
    4. ends
    5.  
    6. IDispatch               dd  IDispatch_vtable
    7.  
    8. IDispatch_vtable        dd  CShellWindowsEvents_QueryInterface
    9.                 dd  CShellWindowsEvents_AddRef
    10.                 dd  CShellWindowsEvents_Release
    11.                 dd  CShellWindowsEvents_GetTypeInfoCount
    12.                 dd  CShellWindowsEvents_GetTypeInfo
    13.                 dd  CShellWindowsEvents_GetIDsOfNames
    14.                 dd  CShellWindowsEvents_Invoke
     
  9. temp666

    temp666 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    141