Использовать GetWindowLongPtr (hwnd, GWLP_WNDPROC).
Внимание: GetWindowLongPtr на самом деле #define
d для GetWindowLong для 32-битных систем, поэтому для импорта его в Delphi вам может понадобиться вместо этого использовать GetWindowLong. Кроме того, сам GetWindowLongPtr равен #define
d либо для GetWindowLongPtrA, либо для GetWindowLongPtrW (для не-юникодных и юникодных целей), поэтому вам, возможно, снова придется выбрать правильное имя для Delphi, если система импорта там не очень умная. *
Помните, что если вы собираетесь вызывать полученный обработчик окна, вы должны сделать это, используя CallWindowProc . Спасибо @In silico за подсказку.
Обратите внимание, что возвращаемое значение не всегда является реальным указателем на оконную процедуру. Иногда это просто своего рода дескриптор, который распознается и корректно обрабатывается CallWindowProc
. Например, вы не получите реальный указатель на функцию, если ваше приложение является ANSI, но окно принадлежит компоненту Unicode (или наоборот). См. это сообщение в The Old New Thing для более подробной информации.