WndProc

Тема в разделе "WASM.BEGINNERS", создана пользователем 2FED, 9 май 2008.

  1. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Возможно ли получить указатель на поток в котором выполняется оконная процедура окна имеея хендл этого окна?

    мне надо то просто хлопнуть окно чтобы оно не рыпалось, но если вызвать просто DestroyWindow то ему отошлётся WM_DESTROY, и сработают обработчики, а мне надо убить его так чтобы оно этого даже не поняло =)
     
  2. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    Может проще подменить оконную процедуру: SetWindowLong с параметром GWL_WNDPROC и послать ей этот WM_DESTROY
     
  3. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    newProcAddr proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    .IF uMsg==WM_DESTROY
    invoke PostQuitMessage,NULL
    .ELSE
    invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    ret
    .ENDIF
    xor eax,eax
    ret
    newProcAddr endp


    Сделал, но почемуто при вызове PostQuitMessage закрывается вся программа, наверное там специальная процедура выхода нужна
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    DWORD GetWindowThreadProcessId( HWND hwnd, PDWORD pdwProccssId);

     
  5. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    Значит ненадо PostQuitMessage слать видимо, значит там есть еще окна, которые обрабатываются в одном цикле с прибиваемым окном

    Убивать поток наверно не следует по этой же причине
     
  6. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Ага, я уже понял в чём дело, там диалог, и по его завершение идёт некий код, а я думал что он выполняется по приходу WM_DESTROY
     
  7. fourty_fourty

    fourty_fourty Андрей

    Публикаций:
    0
    Регистрация:
    23 фев 2008
    Сообщения:
    23
    Адрес:
    Нязепетровск
    2FED
    попробуй TerminateProcess
     
  8. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    2FED
    По посту #3. Субклассируем. Старый проц в oldProcAddr и дальше (синтаксис масм):
     
  9. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    fourty_fourty мне процесс завершать не надо =)
    _basmp_ тоже вариант, но как я уже говорил код которого я хотел избежать выполняется по завершению WinMain(Оконной процедуры)
     
  10. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    2FED
    Убей не пойму, о чем вы.
    Попробуйте переформулировать без оживляжа, может, что и прояснится.
     
  11. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Тфу. Недочитал.. ИМХО, получаешь PID и сносишь с помощью TerminateProcess
     
  12. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    2FED
    Тогда причем тут окно и его процедура? Находите этот код, запоминаете адреса, забиваете нопами в хиеве. Или переход в конец этого кода.
     
  13. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Дык уже не причём, тему создал когда думал что код этот выполняется в оконной процедуре. В общем тему можно сщитать закрытой, всем спасибо =)