为什么有些控件没有Windows句柄?

| 我想获得一些控件的窗口句柄以使用它来做一些事情(需要一个句柄)。这些控件在另一个应用程序中。 奇怪的是;我发现许多控件没有Windows句柄,例如Windows资源管理器中工具栏(?)中的按钮。只需尝试获取Folder / Search /(等)按钮的句柄。它只是给我0。 所以..第一个问题:为什么有些控件没有Windows句柄?难道不是所有人都在控制着窗户吗? (只不过是在谈论标准控件,就像我希望在Windows资源管理器中看到它们一样,在窗格等上都没有自定义内容。) 这就引出我的第二个问题:如果您无法使用它们,该如何使用它们(例如使用EnableWindow)? 非常感谢您的投入! 编辑(附加信息): Windows资源管理器只是一个示例。我经常遇到这个问题-在另一个应用程序中(我真正感兴趣的一个专有应用程序)。我有“物理”控件(因为我可以获得这些控件的AutomationElement),但是它们没有Windows句柄。另外,我试图发送一条消息(SendMessage)以获取按钮状态,试图找出它是否被按下(这是一个标准按钮,似乎仅通过该消息就表现出了这种行为-至少直到我已经看到了,此外,尽管Windows资源管理器按钮显示了类似的行为,就像按钮样式的复选框一样,尽管它们是(推送)按钮,但按下按钮的状态可以比标准按钮持续更长的时间。 )。 SendMessage需要一个窗口句柄。 ToolBar是否以某种方式改变其子元素的行为?带走他们的窗户把手或类似的东西? (使用父句柄/控件ID进行识别吗?)但是,如何在需要Windows句柄的控件上使用函数呢?     
已邀请:
        如果它们没有手柄,则它们不是真正的控件,它们只是被绘制为控件而已。 但是,当然,Windows资源管理器中的工具栏按钮确实具有窗口手柄,它们是工具栏的一部分。使用工具栏操纵功能与其进行交互,而不要与“ 0”进行交互。 或者,更好的是,使用记录在案的API进行搜索之类的事情。逆向工程Windows Explorer对于任何人,尤其是在贫穷的Windows Shell团队中,都没有任何成功,对于那些认为API适用于其他所有人的某些开发人员来说,他们遭受了多年的向后兼容攻击。无论您做什么工作,都很可能在下一版本的Windows上中断。     
        您正在谈论的控件正在使用ToolbarWindow32类。如果要与他们互动,则需要使用工具栏控件的API /消息。例如,要启用按钮,您想使用TB_ENABLEBUTTON。     
        您可以使用GDI,OpenGL或DirectX自己实现控件。在Mozilla Firefox上尝试使用Window Detective,您将看到只有一个窗口。对话框中的控件不是Windows已知的Windows。     

要回复问题请先登录注册