Это нужно, чтобы подгрузить в данный процесс(который я знаю по хендлу окна) dll-ку, в которой будет содержаться перехватчик оконной функции данного окна. У меня все приемлемо работает пока я имею дело только с одним окном, но в общем случе их может быть сколько угодно. ЗЫ: А все-таки мне тоже не совсем понятно, почему проходит такая фишка: Есть один процесс, он подгружает dll, вызывает ее функциию типа Init(), та ставит хук на создание окна... В какое-то время срабатывает хук, убеждается что это нужное окно, (!) и меняет оконную функцию этого окна на другую, которая находится в той же длл-ке, что и хук-функция, а значит в адресном пространстве первого процесса... Логично предположить, что функции, на которую заменили предудущую не придет ни одного сообщения, а перехваченное окошко зависнет. Но у меня такой код прекрасно работает и не падает ...Пока окошко которому заменили его функцию только одно... Разрулите, пожалуйста, кто-нибудь ситуацию
Не совсем понял, что делаешь Хочешь внедрять свою Dll, в другой процесс при его создании? CreateRemoteThread, SetWindowsHookEx, HKEY_LOCAL_MACHINE\Software\Microsoft\Windows_NT\CurrentVersion\Windows\AppImt_DLLs
Booster А в моем случае будет достаточно CreateRemoteThread? Типа послать в этот поток адрес строки с полным именем длл, он загрузит куда надо ее экземпляр, вызовет нужные функции, без проблем? Только вот интересно как происходит передача параметра, адресные пространства ведь различные... Да, еще интересно, как по хендлу окна определить hProcess?
Из моего любимого Рихтера. 2 Из негоже. 1 Вообще рекомендую: Джеффри РИХТЕР - "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows" P.S. Упс опередили малёхо .
Всем спасибо! Кстати, все-таки интересно почему код без внедрения длл работает? А еще - можно ли освободить(и как) память в данном процессе, выделенную с помощью VirtualAllocEx другим процессом?
Код (Text): Кстати, все-таки интересно почему код без внедрения длл работает? Какой код, без внедрения, объясни попонятнее. SetWindowLongPtr, из другого процесса, конечно не будет работать. Для разных процессов это не сделано.
Код типа такого: Код (Text): LRESULT CALLBACK shellProc(int nCode,WPARAM wParam,LPARAM lParam) { switch(nCode) { case HSHELL_WINDOWCREATED: if(isTargetWindow((HWND)wParam)) { hWnd = (HWND)wParam; if(insertToolbar(hWnd))lpfnOldWindowProc = (WNDPROC)SetWindowLong(hWndOE,GWL_WNDPROC,(LONG)newWindowProc); } break; default:break; } return CallNextHookEx(hHook,nCode,wParam,lParam); } ... В итоге при запуске одной программки ее тулбар содержит дополнительную заданную кнопочку, нажатия на которую фиксирует функция newWindowProc.
Я что-то не могу понять, что, в память выделенную для другого процесса с помощью VirtualAllocEx выделевший ее процесс может писать обычным memcpy или даже *p = ? Я ожидал, что есть функции типа WriteVirtualMemory, которые кроме того p еще требуют hProcess...