6

ShellExecuteは何かをするために使用し、最初のパラメーターは です。MSDNHWNDドキュメントには次のように書かれています。

UI またはエラー メッセージの表示に使用される親ウィンドウへのハンドル。操作がウィンドウに関連付けられていない場合、この値は NULL になる可能性があります。

しかし、どちらHWNDの値でも同じ結果が得られます。

例えば ​​:

ShellExecute(0, 'open', 'c:\', nil, nil, SW_SHOWNORMAL);

ShellExecute(Self.Handle, 'open', 'c:\', nil, nil, SW_SHOWNORMAL);

ShellExecute(123456, 'open', 'c:\', nil, nil, SW_SHOWNORMAL);

同じものを取得するだけです(ディスクCを開きます)ので、別のものを使用して何を使用するのHWNDでしょうか?

ところで、「HWND=0」の時はDeskTopのHandleを使うのですか?

4

1 に答える 1

12

これHWNDは、 への呼び出しの結果として表示されるすべての UI のオーナー ウィンドウとして使用されますShellExecute。たとえば、すべてのエラー メッセージ ダイアログは、そのウィンドウによって所有されます。

ウィンドウが所有されている場合の影響については、MSDN のドキュメントで説明されています。主な抜粋:

所有されると、ウィンドウにいくつかの制約が課せられます。

  • 所有されているウィンドウは、z オーダーで常にその所有者の上にあります。
  • 所有者が破棄されると、所有されているウィンドウはシステムによって自動的に破棄されます。
  • 所有されているウィンドウは、所有者が最小化されると非表示になります。

重要なのは最初のものです。GUI アプリから呼び出している場合はShellExecute、アプリで現在アクティブなウィンドウがすべてのウィンドウを所有する必要があります。だから合格MyForm.Handle

アプリに GUI がない場合は、0 を渡します。

コード サンプルでは、​​ への呼び出しでShellExecuteUI がまったく表示されません。したがって、何を渡しても違いはありません。ただし、呼び出しによってエラー ダイアログが表示された場合は、渡すウィンドウ ハンドルが適切になります。

于 2012-11-30T09:31:49.990 に答える