我使用ShellExecute做某事,第一个参数是HWND,MSDN上的documentation说:



但是我发现无论哪个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的手柄吗?

最佳答案

HWND用作任何由于ShellExecute调用而显示的UI的所有者窗口。例如,任何错误消息对话框将归该窗口所有。

窗口拥有的含义在MSDN documentation中进行了描述。关键摘录:



重要的是第一个。如果要从GUI应用程序调用ShellExecute,则希望任何窗口归您的应用程序中当前处于 Activity 状态的窗口所有。因此,传递MyForm.Handle

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

在代码示例中,对ShellExecute的调用根本没有显示任何UI。因此,通过什么都没有关系。但是,如果您的调用导致显示错误对话框,则您传递的窗口句柄将变得有意义。

10-08 04:48