В настоящее время я пытаюсь внедрить некоторый код из http://www.codeproject.com/KB/threads/winspy.aspx (часть подкласса) в мой проект, но у меня возникли некоторые проблемы, я отладил dll, и кажется, что когда я отправляю точно такое же сообщение (или я так думаю) для hwnd подключенного потока сообщение кажется другим (я вижу это благодаря отладке файла dll непосредственно через visual studio).
Итак, с самого начала я делюсь своими собственными winregistered mssg для всех экземпляров DLL. Здесь я пишу то, что я использую для обоих проектов (тот, который скачан с сайта выше, и мой текущий, который пытается имитировать ту же стратегию)
Сначала я делюсь сообщением, которое зарегистрирую позже (в процессе dll процесса) со всеми экземплярами DLL.
#pragma data_seg("Shared")
UINT WM_HOOKEX = 0;
#pragma data_seg()
Ладно, настало время зарегистрировать его, когда dll присоединится ...
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if( ul_reason_for_call == DLL_PROCESS_ATTACH )
{
g_hInstDll = (HINSTANCE) hModule;
::DisableThreadLibraryCalls( g_hInstDll );
if( WM_HOOKEX==NULL )
WM_HOOKEX = ::RegisterWindowMessage( _T("WM_HOOKEX_RK") );
}
return TRUE;
}
И, наконец, после того, как я подключаюсь к теме, я отправляю сообщение
hHook = SetWindowsHookEx( WH_CALLWNDPROC,(HOOKPROC)HookProc,
g_hInstDll, GetWindowThreadProcessId(plist,NULL) );
SendMessage( hwnd,WM_HOOKEX,0,1);
Теперь, благодаря отладке VS dll, я могу проверить, как это сообщение получено на другой стороне, в случае оригинальной части подкласса проекта "3 способа ввести код", параметры
wparam = 1
lparam = 23720848
Пока в моем проекте
wparam = 0
lparam = 23720824
И кажется, что при отладке процедура вообще не распознает WM_HOOKEX, С ОДНЫМИ ПАРАМЕТРАМИ!
Я действительно не понимаю этого, я регистрирую ловушку с подключением процесса dll с точно таким же именем, за исключением того, что я использую WM_HOOKEX = :: RegisterWindowMessage (_T ("WM_HOOKEX_RK")); "с _T, так как мой проект - Unicode, но я действительно сомневаюсь, что это имеет значение.
Все остальное на 100% такое же
SendMessage (то же самое hwnd, то же самое mssg, 0,1);
Есть идеи, почему другая сторона в моем проекте не увидит правильное сообщение с правильными параметрами?
Спасибо