我正在尝试使用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);
答案 0 :(得分:2)
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 Andy和Mesidin以及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