ShellExecute()句柄 - 父窗口?

时间:2008-11-24 21:24:40

标签: handle shellexecute

我正在尝试使用ShellExecute在Excel中打开文件。我正在阅读有关MSDN论坛上的功能,我发现了有关句柄的下列信息,这是第一个参数:

“hwnd [in]用于显示用户界面(UI)或错误消息的所有者窗口的句柄。如果操作与窗口无关,则该值可以为NULL。”

我也听说过这个被称为父窗口的句柄。什么是父/所有者窗口?如下所示,我对句柄使用NULL,但由于操作确实与窗口关联,我可能需要一个句柄,但我不知道该句柄使用什么。

ShellExecute(NULL, "open" ,"Excel.exe", 
    "C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls", 
    NULL, SW_SHOWNORMAL);

4 个答案:

答案 0 :(得分:2)

usually 0

  

hwnd:将收到可能的消息框的父窗口。此参数通常为0.

它指的是顶级窗口:您打开的窗口没有任何父窗口,并且是正在执行的应用程序的主窗口。

当您在应用程序之间切换(ALT-TAB)时,您将在z顺序(例如)中显示下一个顶级窗口(父句柄等于0的下一个应用程序)。

当然,您应用的父级can not be the Desktop Window itself

  

如果您创建父窗口为GetDesktopWindow()的子窗口,则您的窗口现在粘贴到桌面窗口。如果你的窗口调用类似MessageBox()的东西,那么这是一个模态对话框,然后上面的规则启动,桌面被禁用,机器就是吐司。

对于路径,我会建议围绕简单引号的双引号:" ' ... ' "

"'C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls'"

还可以使用双重双引号工作(未经测试):" "" ... "" "

"""C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls"""

,如this thread所示。


实际上,正如your other question AndyMesidin以及ShellExecute Function manual中所述,您可以打开文件,并在参数中传递其路径。

ShellExecute( NULL, "open", 
              "Test.xls", "C:\\Documents and Settings\\Lab1\\My Documents\\", 
              NULL, SW_SHOWNORMAL);

这意味着Excel是打开.xls扩展文件的默认应用程序。

答案 1 :(得分:2)

当你看到它被描述为“父窗口的句柄”时,它意味着它是窗口,该窗口是该函数选择显示的任何UI的父窗口。在您拨打ShellExecute时,您传递的句柄可能已经或可能不是其他窗口的父级,但这并不重要。

答案 2 :(得分:1)

为什么你专门ShellExecuting Excel?如果他们有OpenOffice.org,他们就会被破坏 - 你真的应该在电子表格文件中调用“Open”动词,你不需要硬编码“Excel”名称,这就是ShellExecute的用途。

答案 3 :(得分:0)

是否有任何具体原因,您使用的是ShellExecute?

您可以使用[System.Diagnostics。]打开xls文件.Process.Start [文件名]
我道歉,我没看标签&假设您使用的是.net