Перехват сообщений - C#
Формулировка задачи:
Добрый вечер! Бывает возникает ситуация когда нужно перехватить у процесса функцию, а ещё точнее параметры (сообщение), адресованные этой функции. Так вот, очень много материала по перехвату на C++, а натолкните на путь, где можно прочитать как это делается на C#. Заранее спасибо!
Решение задачи: «Перехват сообщений»
textual
Листинг программы
#include <Windows.h> #include <mscoree.h> #include <metahost.h> #include <wchar.h> #include <fstream> #pragma comment(lib, "mscoree.lib") DWORD WINAPI Inject_Thread(LPVOID lpParam) { ICLRMetaHost * lpMetaHost = NULL; HRESULT hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID *)&lpMetaHost); ICLRRuntimeInfo * lpRuntimeInfo = NULL; hr = lpMetaHost->GetRuntime( L"v4.0.30319", // Версия фреймворка IID_ICLRRuntimeInfo, (LPVOID *)&lpRuntimeInfo); ICLRRuntimeHost * lpRuntimeHost = NULL; hr = lpRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost,IID_ICLRRuntimeHost, (LPVOID *)&lpRuntimeHost); hr = lpRuntimeHost->Start(); DWORD dwRetCode = 0; hr = lpRuntimeHost->ExecuteInDefaultAppDomain( L"C:\\ManagedApp.dll", // Абсолютный путь к сборке L"ManagedApp.Program", // Пространство имен и класс L"EntryPoint", // Имя статического метода L"<Пример>", // Параметры метода &dwRetCode); MessageBox(0, "OK", "OK", MB_OK); return 0; } DWORD APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: CreateThread(NULL, NULL, Inject_Thread, NULL, NULL, NULL); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: default: break; } return true; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д