Delphi HWND在ShellExecute中做什么?
我使用Delphi HWND在ShellExecute中做什么?,delphi,Delphi,我使用ShellExecute来做一些事情,第一个参数是HWND,MSDN上的说明是: 父窗口的句柄,用于显示UI或错误消息。如果操作未与窗口关联,则此值可以为NULL 但是我发现无论哪个HWND值都会得到相同的结果 例如: shell执行(0,'open','c:\',nil,nil,SW_SHOWNORMAL) ShellExecute(Self.Handle,'open',c:\',nil,nil,SW_SHOWNORMAL) ShellExecute(123456,'open','c:\
ShellExecute
来做一些事情,第一个参数是HWND
,MSDN上的说明是:
父窗口的句柄,用于显示UI或错误消息。如果操作未与窗口关联,则此值可以为NULL
但是我发现无论哪个HWND
值都会得到相同的结果
例如:
shell执行(0,'open','c:\',nil,nil,SW_SHOWNORMAL)代码>
ShellExecute(Self.Handle,'open',c:\',nil,nil,SW_SHOWNORMAL)代码>
ShellExecute(123456,'open','c:\',nil,nil,SW_SHOWNORMAL)代码>
只是得到了同样的东西(打开磁盘C),所以我想知道使用不同的HWND
有什么用
顺便说一下,当“HWND=0”是桌面的句柄时?调用ShellExecute
后显示的任何UI的所有者窗口都将使用HWND
。例如,任何错误消息对话框都将属于该窗口
中描述了拥有窗口的含义。主要摘录:
被拥有会在窗口上放置多个约束
- 拥有的窗口在z顺序中始终高于其所有者
- 当所有者被销毁时,系统会自动销毁其拥有的窗口
- 当所有者最小化时,拥有的窗口将隐藏
重要的是第一个。如果您从GUI应用程序调用ShellExecute
,则您希望应用程序中当前活动的窗口拥有任何窗口。所以传递MyForm.Handle
如果应用程序中没有GUI,则传递0
在代码示例中,对ShellExecute
的调用根本没有显示任何UI。所以你通过什么都没关系。但是,如果您的调用导致显示错误对话框,那么您传递的窗口句柄将变得相关。您可以通过调用GetDesktopWindow()
方法来获得桌面窗口HWND
,而此句柄不等于0。0表示空的/未初始化的句柄。@teran但如果传递的窗口句柄等于0,ShellExecute可能包含调用GetDesktopWindow
的代码。