как раз таки и использую ком.lib спасиб за процедуру! q_q а вот у меня не работает, но прабда у меня .dll =)
в хуке функции процесса к которому подгружаюсь к стате тут такая неприятная штука вылезла, в общем инжекчу я процесс, перехватываю у него кое какую функцию и если кое какие параметры совпадают вызываю в его IE окне Navigate, всё вроде бы нормально но процесс после этого зависает, и именно если я использую Navigate, когда сдираю страницу ничего не виснет, ещё заметил если после Navigate поставить MessageBox то по выходу из MessageBox всё нормально, странно не прабда ли? я думал может задержка нужна, ставил sleep,10000 но после этих 10 сек процесс виснит. функции CoInitialize, CoUninitialize не вызываю так как процесс их уже наверника вызвал, в прочем пробывал вызывать, тот же эффект! Navigate работает даже страница успевает загрузится, а потом процесс просто замерает =(
Вот от вызова именно этой строчки invoke PropGetVal, hwnd, offset aLocationurl, addr pVarnt и причём виснет не именно на ней а на выходе из потока, если эта строка не вызывалась то зависание при выходе из потока не будет
Переписал процедуру, всёравно эффект тот же Код (Text): IENavigate2 proc hwnd:dword,url:dword LOCAL ppIE : dword LOCAL ppSp : dword LOCAL pVarnt: VARIANT LOCAL pVarnt5: VARIANT LOCAL parentWindow:dword LOCAL buf[50]:byte mov ebx,hwnd mov ebx,[ebx] lea eax,parentWindow push eax push hwnd call dword ptr [ebx+432] cmp eax, S_OK jne err mov ebx,parentWindow mov ebx,[ebx] lea eax,ppSp push eax push offset IID_IServiceprovider push parentWindow call dword ptr [ebx] cmp eax, S_OK jne err mov ebx,ppSp mov ebx,[ebx] lea eax,ppIE push eax push offset IID_IWebBrowser2 push offset IID_IWebbrowserApp push ppSp call dword ptr [ebx+12] cmp eax, S_OK jne err mov pVarnt.vt, VT_NULL mov ebx,ppIE mov ebx,[ebx] lea eax,pVarnt push eax push eax push eax push eax push url push ppIE call dword ptr [ebx+2Ch] cmp eax, S_OK jne err jmp exit err: invoke wsprintf,addr buf,$CTA0("%d"),eax invoke MessageBox,0,addr buf,$CTA0("ERROR"),0 exit: ret IENavigate2 endp пока кроме как вызвать её в потоке а поток потом усыпить ничего в голову не приходит, но это уж очень криво! что это будет если она после каждого вызова будут оставлять спящий поток =(
чегото там не хватает IWebBrowserEvents2.asm(76) : error A2006: undefined symbol : free MHOOK.asm(146) : error A2006: undefined symbol : malloc
А как можно кроме Navigate загрузить страницу, например локально если он на компе уже сохранена? Просто есть одно окошко которое грузит страницу без Navigate! Предположительно через метод Set_innerHTML но когда я пробовал так загрузить страницу на дельфях оно мне выдало что интерфейс не поддерживается =)
да в Body. но мне надо перехватить события вывода страницы и подставить туда свою, вот тот пример который заменеят страницу гугла на васм, работает везде кроме этого окна, но тем немение в нём выводится MessageBox с DISPID_DOCUMENTCOMPLETE из перевого примера, но не происходит событие Navigate
Блин не могли мне сказать что объекты надо освобождать =))) coinvoke ppIE, IUnknown, Release coinvoke ppSp, IUnknown, Release coinvoke parentWindow, IUnknown, Release я то думал чо мой навигайт зависает при выходе из потока =)))
Сделал как в примере, работает но как всегда есть одно НО! В общем вызываю я код который устанавливает обработчик IWebBrowserEvents2 в отдельном потоке, и как я выяснил, обработчик IWebBrowserEvents2 выполняется в том же потоке откуда он был установлен, тоесть если я разрушу поток то ничего обрабатыватся не будет и вся программа просто повиснит, пробовал зациклить поток ... exit: invoke sleep,100 jmp exit но это эффекта не дало, при вызове invoke sleep,100 поток как бы усыпает и IWebBrowserEvents2 не может выполнится и всё опять виснит, работает только если поставить MessageBox в конце процедуры потока устанавливающего перехват, но как обойтий без MessageBox? как зациклить его так чтобы он нормально всё обробатывал?