我使用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。因此,通过什么都没有关系。但是,如果您的调用导致显示错误对话框,则您传递的窗口句柄将变得有意义。