6

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),所以我想知道使用 different 有什么用HWND

顺便说一句,当'HWND = 0'时使用DeskTop的句柄?

4

1 回答 1

12

HWND用作调用ShellExecute. 例如,任何错误消息对话框都将归该窗口所有。

MSDN 文档中描述了被拥有的窗口的含义。关键摘录:

拥有对一个窗口有几个限制。

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

重要的是第一个。如果您ShellExecute从 GUI 应用程序调用,那么您希望任何窗口都归您应用程序中当前处于活动状态的窗口所有。所以通过MyForm.Handle

如果您的应用程序中没有 GUI,则传递 0。

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

于 2012-11-30T09:31:49.990 回答