Handle for ShellExecute() - Parent Window?

寵の児 提交于 2021-01-27 11:28:50

问题


I am trying to use ShellExecute to open a file in Excel. I was reading about the function on MSDN forums, and I found the folowing information about the handle, which is the first parameter:

"hwnd [in] A handle to the owner window used for displaying a user interface (UI) or error messages. This value can be NULL if the operation is not associated with a window."

I have also heard this referred to as the handle to the parent window. What is the parent/owner window? As you see below I am using NULL for the handle, but since the operation is indeed associated with a window, I probably need a handle, but I don't know what to use for the handle.

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

回答1:


It is usually 0

hwnd : parent window that will receive a possible messagebox. This parameter is usually 0.

It refers to the top-level window: the window you are opening does not have any parent, and is the main window for the application being executed.

When you are switching between applications (ALT-TAB), you are displaying the next top-level window (the next app with a parent handle equals to 0) in the z-order (for instance).

Of course, the parent to your app can not be the Desktop Window itself:

If you create a child window whose parent is GetDesktopWindow(), your window is now glued to the desktop window. If your window then calls something like MessageBox(), well that's a modal dialog, and then the rules above kick in and the desktop gets disabled and the machine is toast.

For the path, I would advice double quotes surrounding simple quotes: " ' ... ' "

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

Could work also (untested) with double double quotes : " "" ... "" "

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

, as illustrated by this thread.


Actually, as mentioned in your other question by Andy and by Mesidin, and in ShellExecute Function manual, you can open the file, and pass its path in parameter.

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

That means Excel is the default application for opening .xls extension files though.




回答2:


When you see it described as the "handle to the parent window," it means it's the window that will be the parent window of whatever UI the function chooses to display. The handle you pass may or may not already be the parent of some other window at the time you call ShellExecute, but that doesn't matter.




回答3:


Why are you specifically ShellExecuting Excel? If they have OpenOffice.org, they are broken - you really should be invoking the "Open" verb on the spreadsheet file, you don't need to hard-code in the "Excel" name, that's what ShellExecute is for.




回答4:


Is there any specific reason, you are using ShellExecute?

You can open an xls file using [System.Diagnostics.]Process.Start [name of the file]
I apologize, I didn't look at tags & assume that you are using .net



来源:https://stackoverflow.com/questions/315527/handle-for-shellexecute-parent-window

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!