【发布时间】:2010-12-03 00:05:02
【问题描述】:
是否存在任何 Windows api 函数来检索 Windows 句柄的 WNDPROC?
提前致谢。
【问题讨论】:
是否存在任何 Windows api 函数来检索 Windows 句柄的 WNDPROC?
提前致谢。
【问题讨论】:
使用GetWindowLongPtr(hwnd, GWLP_WNDPROC)。
注意:对于 32 位系统,GetWindowLongPtr 实际上是 #defined 到 GetWindowLong,因此为了在 Delphi 中导入它,您可能需要使用 GetWindowLong。同样,GetWindowLongPtr 本身是 #defined 到 GetWindowLongPtrA 或 GetWindowLongPtrW(对于非 unicode 和 unicode 目标),所以如果导入系统不是很聪明,您可能需要手动为 Delphi 选择正确的名称。
记住,如果你要调用获得的窗口过程,你应该使用CallWindowProc。感谢@In silico 的提示。
请注意,返回的值并不总是指向窗口过程的真正指针。有时它只是一种被CallWindowProc 识别并正确处理的句柄。例如,如果您的应用程序是 ANSI,但窗口属于 Unicode 组件(反之亦然),您将无法获得真正的函数指针。详情请见this posting in The Old New Thing。
【讨论】:
WNDPROC,你必须使用CallWindowProc()。
GetWindowLong(或者最好使用一些条件编译)。