проблема с получением инфы с чужого окна

Тема в разделе "WASM.WIN32", создана пользователем Flasher, 14 май 2007.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    проблема такая, прога юзает аналог listbox только класс другой, к этому классу с лёгкостью получаю доступ через FindWindowEx.
    Но сообщения на подобие этого invoke SendMessage,eax,LB_ADDSTRING,0,offset szMes или invoke SendMessage,eax,LB_GETTEXT,1,offset buffer не сработывают.
    Вопрос, каким образом моно узнать - как прога сама туда инфу добавляет и получает?
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Flasher
    Можно начать с простого - посмотреть на ее сообщения при помощи: spyxx, или повесить хук на вызов ее оконной процедуры, или внедрить свой код в ее адресное пространство с сабслассингом.
     
  3. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    q_q
    spyxx - ничего полезного не показало..
    Вечный вопрос "как"? ;)
    Что-то тут намудрил я, примерно об этом речь идёт?
    Код (Text):
    1. .data
    2. szClass db "Chat",0
    3. buffer db 256 dup(0)
    4. hListBox dd 0
    5. lpListBox dd 0
    6.  
    7. .code
    8. ListBoxDisp proc hCtl:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
    9.        .if uMsg == WM_COMMAND
    10.           invoke MessageBox,0,offset buffer,offset buffer,0
    11.        .endif
    12.        invoke CallWindowProc,lpListBox,hCtl,uMsg,wParam,lParam
    13.        ret
    14. ListBoxDisp endp
    15. FindWnd proc hWnd:DWORD,lParam:DWORD
    16.        invoke GetWindowText,hWnd,offset buffer,sizeof buffer
    17.        mov eax,offset buffer
    18.         .if byte ptr [eax+0] == 'C' && byte ptr [eax+1] == 'h' && byte ptr [eax+4] == ':'
    19.            invoke FindWindowEx,hWnd,0,addr szClass,0
    20.             .if eax != 0
    21.                mov hListBox,eax
    22.                invoke SetWindowLong,hListBox,GWL_WNDPROC,offset ListBoxDisp
    23.                mov lpListBox,eax
    24.                invoke MessageBox,0,offset buffer,offset buffer,0
    25.             .endif
    26.            mov eax,0
    27.            ret
    28.         .endif
    29.        mov eax,1
    30.        ret
    31. FindWnd endp
    32. start:
    33.        invoke EnumWindows,offset FindWnd,0
    34.        invoke ExitProcess,0
    35. end start
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Flasher
    Вечный вопрос "как"?
    Используя SetWindowsHookEx с параметром(ами) WH_CALLWNDPROC, WH_CALLWNDPROCRET и WH_GETMESSAGE установить соответствующие ловушки для записи лога сообщений.

    примерно об этом речь идёт?
    Да, только ListBoxDisp должна находиться в адресном пространстве исследуемого процесса. Пример внедрения кода в другой процесс есть у Рихтера в 22-ой главе.

    spyxx - ничего полезного не показало..
    Spy использует для слежения за окнами способ указанный выше, если действительно нет ничего полезного, то они не помогут.
     
  5. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Внедрил ListBoxDisp, и словил только вот что:
    000000084h - WM_NCHITTEST
    0000046efh - WM_NCPAINT
    00000046fh
    00000046eh
    000000085h
    00000000fh
    000000200h - WM_MOUSEFIRST, WM_MOUSEMOVE
    000000020h

    spyxx показывает:
    Window styles 50200000
    WS_CHILD
    WS_VISIBLE
    WS_VSCROLL
    WS_OVERLAPPED

    Extended styles 0000020
    WS_EX_LEFT
    WS_EX_LTRREADING
    WS_EX_RIGHTSCROLLBAR
    WS_EX_TRANSPARENT

    Самое интересное, что в ListBoxDisp
    Код (Text):
    1.        .if uMsg == WM_LBUTTONUP
    2.           invoke SendMessage,hCtl,LB_GETCURSEL,0,0
    3.            .if eax != -1
    4.            .endif
    LB_GETCURSEL всё время возвращает 0 а не -1

    Похоже какой-то самопальный listbox.
    всё нафик, голова опухла, пойду сделаю себе кофе, не кто больще не хочет? :)
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Flasher
    spyxx показывает ... WS_EX_TRANSPARENT
    Это еще зачем?
    Может быть, ты прицепился к прозрачному окну над listbox'ом? Посмотри все окна процесса, с целью найти более похожее на listbox.

    интересное, что в ListBoxDisp ... LB_GETCURSEL всё время возвращает 0 а не -1
    Не зацикливайся на listbox'е.

    всё нафик, голова опухла
    Может быть, пришла пора огласить имя исследуемой программы?
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    зря обсуждаете, ничего вы сообщениями не добъетесь..
    делфи, борланд? свои классы, не основанные на виндовых.
    чтобы знать, как, нужно курить библиотеку, на которой написанна программа

    зы: и класс какой-то нестандартный: "Chat". похоже, это даже не дельфи
     
  8. SnikerS

    SnikerS New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2009
    Сообщения:
    4
    Был похожий случай.
    Посмотри, опять таки через Spyxx, какие сообщения приходят главному окну(перенту). Ты увидешь много не стандартных сообщений. Вот их и ковыряй.
     
  9. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Привет из прошлого :))