Возможно, вы зашли в тупик, потому что запрашиваете не ту версию windowproc.
Window Procs, как и приложения, существует в двух вариантах: ANSI и Unicode. Windows не может вернуть необработанный указатель на окно ANSI в приложение Unicode или наоборот, так как они попытаются вызвать его с неверным типом строки.
Итак, функция GetWindowLongPtr отсутствует. Это макрос, который разрешает две «настоящие» функции, которые предоставляет Windows API: GetWindowLongPtrA и GetWindowLongPtrW. Если окно является окном Юникода, и GetWindowLongPtrA вызывается, окна возвращают дескриптор вместо необработанного указателя, так что он может перехватывать вызовы (сделанные через CallWindowProc) и перенаправлять строки из ANSI в Юникод. Обратное преобразование имеет место в другом направлении.
Даже если вы вызываете правильную функцию, вы все равно можете получить дескриптор - вполне возможно, что ANSI-код подклассифицирует окно Unicode. поэтому windowproc был полностью заменен одним из дескрипторов callWindowProc.
В таком случае - думаю, мне не повезло.