Я узнал, где проблема. Моя модель состоит из одной внутренней модели и нескольких слоев. Когда я создаю функцию, мой вход поступает от внешней модели, но вывод от внутренней модели, что вызывает разрыв между входом и выходом. Я просто изменил исходный ввод на входной слой внутренней модели, и он работает.
Согласно документам, правильный поступок является передачей аргументы, которые Вы получили непосредственно к CallNextHookEx, точно как Вы получили их. Необходимо также назвать CallNextHookEx независимо от того, решили ли Вы обработать сообщение рычага.
Согласно MSDN, первому параметру к CallNextHookEx
проигнорирован на на NT/XP/2003, и для более старых находящихся в Win95 операционных систем это должно быть HHOOK
Вы получили при регистрации рычага в SetWindowsHookEx
. Документы не указывают значение для Windows 2000, но так как это - часть семейства NT, разумное предположение - то, что это проигнорировано там также.
Учитывая все это, хороший способ кодировать метод для операционных систем NT-семейства мог бы быть этим:
LRESULT CALLBACK CBTProc( int code, WPARAM wp, LPARAM lp )
{
if( code == HCBT_CREATEWND )
ProcessCreateWnd( wp, lp );
return CallNextHookEx( 0, code, wp, lp );
}
void ProcessCreateWnd( WPARAM wp, LPARAM lp )
{
// my code here
}
Это удостоверяется, что Вы всегда называете рычаг в конце своей обработки, и мешает случайно добавлять a return
это обойдет CallNextHookEx
.