【问题标题】:Get the WNDPROC for windows handle获取 Windows 句柄的 WNDPROC
【发布时间】:2010-12-03 00:05:02
【问题描述】:

是否存在任何 Windows api 函数来检索 Windows 句柄的 WNDPROC

提前致谢。

【问题讨论】:

    标签: c++ windows delphi winapi


    【解决方案1】:

    使用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

    【讨论】:

    • @Salvador:如果你打算调用返回的WNDPROC,你必须使用CallWindowProc()
    • 最新版本的 Delphi 定义了 GetWindowLongPtr 并自动处理 UNICODE/ANSI 映射
    • @David:很高兴知道,谢谢!希望 OP 有足够新的 Delphi 版本。如果没有,警告他也要尝试GetWindowLong(或者最好使用一些条件编译)。
    猜你喜欢
    • 1970-01-01
    • 2020-04-13
    • 2014-05-22
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多