ウィンドウハンドルを指定して最前面表示にする
23 SetTopMost 動作確認 Delphi2007 更新日 2008/01/14(月)
2009/01/15(木)

自作アプリはもちろんですが
他のウィンドウを含めて、ハンドルを指定して
ウィンドウが最前面表示(常に前面)になっているか調べたり
最前面表示と通常表示状態を切り替える方法です。

────────────────────
//最前面表示かどうかを確認する関数
function IsTopMostWnd(Target: HWND): boolean;
begin
  Result := ((GetWindowLong(Target, GWL_EXSTYLE) and WS_EX_TOPMOST) <> 0);
end;

//最前面表示にしたり解除したりする関数
procedure SetTopMostWnd(Target: HWND; const Value: Boolean);
begin
  if Value then
  begin
    SetWindowPos(Target, HWND_TOPMOST, 0, 0, 0, 0,
      SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE or SWP_NOOWNERZORDER);
  end else
  begin
    SetWindowPos(Target, HWND_NOTOPMOST, 0, 0, 0, 0,
      SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE or SWP_NOOWNERZORDER);
  end;
end;
────────────────────
Excelに対してこの処理を実行する時に
フラグとしてSWP_NOOWNERZORDERを指定しないと
正しく動作してくれないので、このフラグをつけています。

他のアプリケーションのウィンドウや
自分のアプリに対してはSWP_NOOWNERZORDERは必要ないようです。

参考────────────────────
Vista?で?Excel?を最前面に表示する - Moo Soft
http://maglog.jp/moosoft/Article205140.html

[Delphi:43570] Re: 呼び出したアプリを常に手前に
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=43570