HWND在ShellExecute中做了什么?

Han*_*lin 6 delphi

ShellExecute用来做某事,第一个参数是HWND ,MSDN上的文档说:

父窗口的句柄,用于显示UI或错误消息.如果操作未与窗口关联,则此值可以为NULL.

但我发现无论哪个HWND值得到相同的结果.

例如 :

ShellExecute(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'使用DeskTop的Handle时?

Dav*_*nan 12

HWND用作任何显示为调用结果的UI的所有者窗口ShellExecute.例如,该窗口将拥有任何错误消息对话框.

MSDN文档中描述了所拥有窗口的含义.主要摘录:

拥有在窗口上设置了几个约束.

  • 拥有的窗口始终位于z顺序的所有者之上.
  • 当系统所有者被销毁时,系统会自动销毁拥有的窗口.
  • 拥有的窗口在其所有者最小化时隐藏.

重要的是第一个.如果您ShellExecute使用GUI应用程序进行呼叫,则您希望任何窗口都归您应用中当前处于活动状态的窗口所有.通过MyForm.Handle.

如果您的应用中没有GUI,则传递0.

在代码示例中,调用ShellExecute根本没有显示任何UI.所以你传递的没有任何区别.但是如果您的调用导致显示错误对话框,那么您传递的窗口句柄将变得相关.