Получить WNDPROC для дескриптора окна - PullRequest
2 голосов
/ 03 декабря 2010

Существуют ли какие-либо функции API Windows для получения WNDPROC для дескриптора Windows?

Заранее спасибо.

1 Ответ

14 голосов
/ 03 декабря 2010

Использовать 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 для более подробной информации.

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