проблема такая, прога юзает аналог listbox только класс другой, к этому классу с лёгкостью получаю доступ через FindWindowEx. Но сообщения на подобие этого invoke SendMessage,eax,LB_ADDSTRING,0,offset szMes или invoke SendMessage,eax,LB_GETTEXT,1,offset buffer не сработывают. Вопрос, каким образом моно узнать - как прога сама туда инфу добавляет и получает?
Flasher Можно начать с простого - посмотреть на ее сообщения при помощи: spyxx, или повесить хук на вызов ее оконной процедуры, или внедрить свой код в ее адресное пространство с сабслассингом.
q_q spyxx - ничего полезного не показало.. Вечный вопрос "как"? Что-то тут намудрил я, примерно об этом речь идёт? Код (Text): .data szClass db "Chat",0 buffer db 256 dup(0) hListBox dd 0 lpListBox dd 0 .code ListBoxDisp proc hCtl:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD .if uMsg == WM_COMMAND invoke MessageBox,0,offset buffer,offset buffer,0 .endif invoke CallWindowProc,lpListBox,hCtl,uMsg,wParam,lParam ret ListBoxDisp endp FindWnd proc hWnd:DWORD,lParam:DWORD invoke GetWindowText,hWnd,offset buffer,sizeof buffer mov eax,offset buffer .if byte ptr [eax+0] == 'C' && byte ptr [eax+1] == 'h' && byte ptr [eax+4] == ':' invoke FindWindowEx,hWnd,0,addr szClass,0 .if eax != 0 mov hListBox,eax invoke SetWindowLong,hListBox,GWL_WNDPROC,offset ListBoxDisp mov lpListBox,eax invoke MessageBox,0,offset buffer,offset buffer,0 .endif mov eax,0 ret .endif mov eax,1 ret FindWnd endp start: invoke EnumWindows,offset FindWnd,0 invoke ExitProcess,0 end start
Flasher Вечный вопрос "как"? Используя SetWindowsHookEx с параметром(ами) WH_CALLWNDPROC, WH_CALLWNDPROCRET и WH_GETMESSAGE установить соответствующие ловушки для записи лога сообщений. примерно об этом речь идёт? Да, только ListBoxDisp должна находиться в адресном пространстве исследуемого процесса. Пример внедрения кода в другой процесс есть у Рихтера в 22-ой главе. spyxx - ничего полезного не показало.. Spy использует для слежения за окнами способ указанный выше, если действительно нет ничего полезного, то они не помогут.
Внедрил 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): .if uMsg == WM_LBUTTONUP invoke SendMessage,hCtl,LB_GETCURSEL,0,0 .if eax != -1 .endif LB_GETCURSEL всё время возвращает 0 а не -1 Похоже какой-то самопальный listbox. всё нафик, голова опухла, пойду сделаю себе кофе, не кто больще не хочет?
Flasher spyxx показывает ... WS_EX_TRANSPARENT Это еще зачем? Может быть, ты прицепился к прозрачному окну над listbox'ом? Посмотри все окна процесса, с целью найти более похожее на listbox. интересное, что в ListBoxDisp ... LB_GETCURSEL всё время возвращает 0 а не -1 Не зацикливайся на listbox'е. всё нафик, голова опухла Может быть, пришла пора огласить имя исследуемой программы?
зря обсуждаете, ничего вы сообщениями не добъетесь.. делфи, борланд? свои классы, не основанные на виндовых. чтобы знать, как, нужно курить библиотеку, на которой написанна программа зы: и класс какой-то нестандартный: "Chat". похоже, это даже не дельфи
Был похожий случай. Посмотри, опять таки через Spyxx, какие сообщения приходят главному окну(перенту). Ты увидешь много не стандартных сообщений. Вот их и ковыряй.