3

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

4 に答える 4

2

通常は0です

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"""

、このスレッドで示されているように。


実際、AndyMesidinによる他の質問、およびShellExecute Function manualで述べたように、ファイルを開き、そのパスをパラメーターに渡すことができます。

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

つまり、Excel は .xls 拡張子ファイルを開くための既定のアプリケーションです。

于 2008-11-24T21:32:51.427 に答える
2

「親ウィンドウへのハンドル」として記述されている場合、それは、関数が表示することを選択した UI の親ウィンドウになるウィンドウであることを意味します。渡すハンドルは、呼び出した時点ですでに他のウィンドウの親である場合とそうでない場合がありますがShellExecute、それは問題ではありません。

于 2008-11-24T22:59:08.040 に答える
1

なぜ具体的にShellExecuting Excelなのですか? それらが OpenOffice.org を持っている場合、それらは壊れています。実際には、スプレッドシート ファイルで「Open」動詞を呼び出す必要があります。「Excel」名をハードコードする必要はありません。それが ShellExecute の目的です。

于 2008-11-24T23:29:15.340 に答える
0

ShellExecuteを使用している特定の理由はありますか?

[System.Diagnostics.]Process.Start [ファイル名] を使用して xls ファイルを開くことができます。
申し訳ありませんが、タグを見ていませんでした。

于 2008-11-24T23:16:03.043 に答える