我想获得由我的 Delphi 应用程序打开的新 vista 样式 Open/SaveDialog 的窗口句柄。
通过解析 OnShow 可以使用旧样式对话框,但使用新样式对话框没有这样的事件。
是否有可能遍历 Windows 中的所有窗口句柄并以这种方式获得它?
谢谢!
编辑:我知道 OpenDialog.Handle 将返回句柄,但仅当对话框可见时(否则为 0)。在显示对话框后,我需要一个事件来直接捕获句柄(无需任何用户操作,即:在对话框中选择一个项目,更改文件类型等)。
我想获得由我的 Delphi 应用程序打开的新 vista 样式 Open/SaveDialog 的窗口句柄。
通过解析 OnShow 可以使用旧样式对话框,但使用新样式对话框没有这样的事件。
是否有可能遍历 Windows 中的所有窗口句柄并以这种方式获得它?
谢谢!
编辑:我知道 OpenDialog.Handle 将返回句柄,但仅当对话框可见时(否则为 0)。在显示对话框后,我需要一个事件来直接捕获句柄(无需任何用户操作,即:在对话框中选择一个项目,更改文件类型等)。
我想获得由我的 Delphi 应用程序打开的新 vista 样式 Open/SaveDialog 的窗口句柄。
这可以通过对话框的Handle
属性获得。
捕捉对话框显示事件的最简单方法可能是使用在显示对话框之前立即设置的 CBT 挂钩,并在它关闭后立即删除。
TOpenDialog 有一个 OnShow 事件,该事件会在显示对话框后触发,因此您可以使用它来获取 OpenDialog.Handle,因为当时已经设置了句柄。
编辑:在一些人指出使用 OnShow 事件会改变对话框外观后,我对此进行了测试,并且可以确认使用 OnShow 事件确实会改变对话框的外观。