Почему меняется wparam, если я использую одно и то же сообщение с такими же параметрами? - PullRequest
0 голосов
/ 18 февраля 2011

В настоящее время я пытаюсь внедрить некоторый код из 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);

Есть идеи, почему другая сторона в моем проекте не увидит правильное сообщение с правильными параметрами?

Спасибо

1 Ответ

2 голосов
/ 21 февраля 2011

Первый вопрос, почему вы это делаете:

hHook = SetWindowsHookEx( WH_CALLWNDPROC,(HOOKPROC)HookProc,
                            g_hInstDll, GetWindowThreadProcessId(plist,NULL);

Перепишите его как

hHook = SetWindowsHookEx( WH_CALLWNDPROC,HookProc,
                            g_hInstDll, GetWindowThreadProcessId(plist,NULL)); 

Что на EARTH дало вам идею, что лучший способ справиться с несовпадением типовошибка была просто разыграть?Вам нужно исправить HookProc, чтобы он на самом деле соответствовал нужным функциям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...