привет
нужно сделать хук пары функция из двух dll
dll в адресном пространстве моего процесса
можно ли такое реализовать в принципе или нет
читаю
-----------------
Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL low-level hook, you cannot implement global hooks in the Microsoft .NET Framework. To install a global hook, a hook must have a native DLL export to inject itself in another process that requires a valid, consistent function to call into. This behavior requires a DLL export. The .NET Framework does not support DLL exports. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.
-------------------------
только вот непонятно глобальный мой хук или нет?
если есть у кого пример хука — прошу поделиться
хук не для мышки или клавиатуры и не использует SetWindowsHookEx
код на дельфи юзает WriteProcessMemory чтобы изменить адрес перехода на мою функцию
возможно ли это реализовать на для своего процесса net?
Здравствуйте, nemoys, Вы писали:
N>привет N>нужно сделать хук пары функция из двух dll N>dll в адресном пространстве моего процесса N>можно ли такое реализовать в принципе или нет
Можно. Тебе не хук нужен, а перехват API функции. Поищи в форуме по Win32, там это многократно обсуждалось.
N>только вот непонятно глобальный мой хук или нет?
Глобальный хук ставится для системы в целом, локальный — для потока. Ни то, ни другое тебе не надо.
N>код на дельфи юзает WriteProcessMemory чтобы изменить адрес перехода на мою функцию
И это тоже лишнее, если все в твоем процессе. Можно обычное копирование сделать, естественно, неуправляемое (memcpy из C)
N>возможно ли это реализовать на для своего процесса net?
В принципе да, но большей частью будешь писать unsafe код.
PD>Можно. Тебе не хук нужен, а перехват API функции. Поищи в форуме по Win32, там это многократно обсуждалось.
так у меня и есть код для win 32
вот пробую перенести на net и думаю а возможно ли
N>>код на дельфи юзает WriteProcessMemory чтобы изменить адрес перехода на мою функцию PD>И это тоже лишнее, если все в твоем процессе. Можно обычное копирование сделать, естественно, неуправляемое (memcpy из C)
а можно все же пример именно на NET
любой — просто поиск на паре форумов ничего не дал — искал по hook api
Здравствуйте, nemoys, Вы писали:
PD>>Можно. Тебе не хук нужен, а перехват API функции. Поищи в форуме по Win32, там это многократно обсуждалось.
N>так у меня и есть код для win 32 N>вот пробую перенести на net и думаю а возможно ли
Сделать так, чтобы перехватчик представлял собой метод управляемого кода — не получится. Там можно только неуправляемый код использовать. Но есть MC++ — в нем можно смешивать управляемый и неуправляемый код. Я такое делать не пробовал, но ИМХО должно получиться. Еще проще (это мне проще!) — написать неуправляемую DLL на C (лучше именно на С, а не С++), в ней некий метод, который этот перехват сделает, его экспортировать и по PInvoke вызвать. Если С++ знаешь, то это самое простое решение — берешь свой существующий код и делаешь из него DLL. В общем, принципиальных проблем тут нет, но повозиться придется.
N>а можно все же пример именно на NET
Увы, нет у меня его.
N>любой — просто поиск на паре форумов ничего не дал — искал по hook api
Еще раз — хуки здесь не нужны. Кстати, hook api — такого термина тоже нет, какой там уж api, когда всего 2 функции
PD>Сделать так, чтобы перехватчик представлял собой метод управляемого кода — не получится. Там можно только неуправляемый код использовать. Но есть MC++ — в нем можно смешивать управляемый и неуправляемый код. Я такое делать не пробовал, но ИМХО должно получиться. Еще проще (это мне проще!) — написать неуправляемую DLL на C (лучше именно на С, а не С++), в ней некий метод, который этот перехват сделает, его экспортировать и по PInvoke вызвать. Если С++ знаешь, то это самое простое решение — берешь свой существующий код и делаешь из него DLL. В общем, принципиальных проблем тут нет, но повозиться придется.
когда всего 2 функции
у меня есть библа написанная на дельфи которая весь функционала делает
попробывал прикрутить к своей проги — ругается что не COM и не OCX
вот и решил переписать на нет
я так понимаю надо пересобрать библу как то чтобы ее видел NET?
N> у меня есть библа написанная на дельфи которая весь функционала делает N>попробывал прикрутить к своей проги — ругается что не COM и не OCX N>вот и решил переписать на нет N>я так понимаю надо пересобрать библу как то чтобы ее видел NET?
Надо сделать DLL и загрузит ее по PInvoke. Как делать DLL — это в Win32, а по PInvoke тут много написано.