DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Excel表示時にアクティブにしたい

環境/言語:[VS2005 C# FW2.0 Windows7]
分類:[.NET]

VS2005 C# Fw2.0 で開発を行っています。
Excelの表示をプログラムから行っているのですが、Windows7で
動かした際にExcelがフォームの背面に表示されます。
( XPでは前に出るので、Windows7の仕様かと思いますが )
前面に表示したいのですが、前面orアクティブにする方法がわかりません。
何か方法がないでしょうか。

表示部のソースは以下のようになっています。
 Excel.Application app = new Excel.Application();
app.Visible = true;
Workbook wb = app.Workbooks.Open(ファイル名以外はMissing);
app.UserControl = true;

宜しくお願い致します。
■No30977に返信(よしおさんの記事)
> ( XPでは前に出るので、Windows7の仕様かと思いますが )

【HKEY_CURRENT_USER\Control Panel\Desktop\ForegroundLockTimeout】
を 0 にセットしてみてください。
http://support.microsoft.com/kb/886217/ja


実行時に一時的に変更したいのであれば、SystemParametersInfo API で
SPI_SETFOREGROUNDLOCKTIMEOUT を呼び出すこともできます。


> Workbook wb = app.Workbooks.Open(ファイル名以外はMissing);
Workbooks オブジェクトも変数に受けましょう。ReleaseComObject のために。
魔界の仮面弁さん

情報ありがとうございます。早速、試してみます。

> Workbooks オブジェクトも変数に受けましょう。ReleaseComObject のために。
ご指摘ありがとうございます。見直します。
魔界の仮面弁さんから教えて頂いた方法で解決できました。

一時的な変更も試してみましたが、APIの戻り値はTrueなのに
レジストリへの設定や、設定値の取得はうまくいきませんでした。
何かを間違っているのだと思いますが、今回は運用で書き換える対応となりました。

ありがとうございました。
■No31002に返信(よしおさんの記事)
> 一時的な変更も試してみましたが、APIの戻り値はTrueなのに
> レジストリへの設定や、設定値の取得はうまくいきませんでした。

それで、[解決済み]のチェックがついていないのですね。

当方では、SPI_(GET/SET)FOREGROUNDLOCKTIMEOUT で設定を読み書き
できることを確認しています(VB6、VB.NET、C#、C++)ので、
恐らくはコーディングミスでは無いでしょうか。

※ VS2010/VS2012 では、開発環境の起動時において、この設定値が
 破壊されてしまうという不具合があります。今回は VS2005 なので
 関係ないとは思いますが、一応参考までに。
 http://bbs.wankuma.com/index.cgi?mode=all&namber=63230


なお、SET した結果がレジストリにまで影響を与えるかどうかは、
SystemParametersInfo の最後の引数によって異なりますが、
必ずしも SPIF_UPDATEINIFILE を設定せずとも機能すると思います。
設定のset/getは可能とのことですので、コーディングを見直してみます。
事象自体は解決しましたので、クローズさせて頂きます。

魔界の仮面弁士さん
回答頂き、ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板