ShellExecute()のハンドル-親ウィンドウ?
-
10-07-2019 - |
質問
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);
解決
hwnd:考えられるメッセージボックスを受け取る親ウィンドウ。このパラメーターは通常0です。
トップレベルウィンドウを指します。開いているウィンドウには親がなく、実行中のアプリケーションのメインウィンドウです。
アプリケーションを切り替えるとき(ALT-TAB)、次の最上位ウィンドウ(親ハンドルが0に等しい次のアプリ)をzオーダー(たとえば)に表示します。
もちろん、アプリの親デスクトップウィンドウ自体:
親がGetDesktopWindow()である子ウィンドウを作成すると、ウィンドウはデスクトップウィンドウに接着されます。その後、ウィンドウがMessageBox()のようなものを呼び出すと、それはモーダルダイアログになり、上記のルールが作動し、デスクトップが無効になり、マシンが乾杯します。
パスについては、単純な引用符を囲む二重引用符をアドバイスします。" '...'"
"'C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls'"
二重の二重引用符でもテストできませんでした:" "" ..."" "
"""C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls"""
、このスレッド。
実際には、他の質問で言及されているように、 Andy および Mesidin および ShellExecute Functionマニュアルでは、ファイルを開いて、そのパスをパラメーターに渡すことができます。
ShellExecute( NULL, "open",
"Test.xls", "C:\\Documents and Settings\\Lab1\\My Documents\\",
NULL, SW_SHOWNORMAL);
つまり、Excelは.xls拡張ファイルを開くためのデフォルトのアプリケーションです。
他のヒント
「親ウィンドウへのハンドル」と説明されている場合は、つまり、関数が表示することを選択したUIの親ウィンドウが であることを意味します。渡すハンドルは、 ShellExecute
を呼び出した時点で他のウィンドウの親である場合とそうでない場合がありますが、それは重要ではありません。
なぜあなたはShellExecuting Excelなのですか? OpenOffice.orgがある場合、それらは壊れています-あなたは本当に" Open"を呼び出すべきです。スプレッドシートファイルの動詞は、「Excel」にハードコードする必要はありません。名前、それがShellExecuteの目的です。
ShellExecuteを使用している特定の理由はありますか?
[System.Diagnostics。] Process.Start [ファイルの名前]
を使用してxlsファイルを開くことができます。
申し訳ありませんが、タグを見ていませんでした。 .netを使用していると仮定します