一些控件怎么没有窗口句柄?

我想得到一些控件的窗口句柄来做一些东西(需要一个句柄)。 这些控件在不同的应用程序中。

奇怪的是; 我发现许多控件没有窗口句柄,就像Windows资源pipe理器中工具栏(?)中的button一样。 只要尝试获取文件夹/search/(等)button的句柄。 它只是给我0。

所以..第一个问题:为什么一些控件没有窗口处理? 他们心中不是所有的控制窗口吗? (只是谈论标准控件,就像我在Windows资源pipe理器中期望的那样,在窗格上没有任何自定义的控件)。

这使我想到了第二个问题:如果无法获得它们的句柄,如何使用它们(如使用EnableWindow)?

非常感谢任何投入!

编辑(其他信息):

Windows资源pipe理器只是一个例子。 我经常遇到这个问题 – 在另一个应用程序中(我真正感兴趣的是专有应用程序)。 我有“物理”控制(因为我可以得到这些控件的AutomationElement),但他们没有窗口句柄。 此外,我试图发送一个消息(SendMessage)来获取button状态,试图找出它是否被推或不推(这是一个标准的button,似乎只有通过该消息,performance出这种行为 – 至less我已经看到了,而且button的按下状态可以持续比标准button更长的时间,尽pipeWindows资源pipe理器button显示类似的行为,就像button式checkbox,尽pipe它们是(推)button)。 SendMessage需要一个窗口句柄。

工具栏在某种程度上改变了它的子元素的行为吗? 拿走他们的窗户把手或类似的东西? (使用父处理/控制ID进行标识??)但是,那么如何使用那些需要窗口句柄的控件的function?

Solutions Collecting From Web of "一些控件怎么没有窗口句柄?"

如果他们没有处理,他们不是真正的控制,他们只是看起来像控制。

但是,当然,Windows资源管理器中的工具栏按钮确实有窗口句柄,它们是工具栏的一部分。 使用工具栏操作功能与它们进行交互,而不是EnableWindow

或者,更好的是,使用记录的API来进行搜索等。 反向工程Windows资源管理器对于任何人来说都不是什么好事,对于所有可怜的Windows Shell团队来说,都是如此。 无论你做什么工作,都有可能在下一个版本的Windows上崩溃。

您正在讨论的控件使用ToolbarWindow32类。 如果你想与他们交互,那么你需要使用工具栏控制 API /消息。 例如对于启用按钮,你想使用TB_ENABLEBUTTON 。

您可以使用GDI,OpenGL或DirectX自行实施控件。 试试Mozilla Firefox上的Window Detective,你会看到只有一个窗口。 对话框中的控件不是Windows已知的窗口。