お世話になります。
いま、OLEオートメーションをつかって
複数のアプリケーション間でデータの受け渡しを
しています。
あるアプリケーション(App1とします)から
ほかのアプリケーション(App2とします)のディスパッチ関数を
呼ぶとApp2が起動し、App2のメインウィンドウが最前面に
表示されます。
ですが、App2が既に起動している状態でApp1からApp2の
ディスパッチ関数を呼ぶとApp2のタスクバーが点滅するだけで、
App2のメインウィンドウが最前面に表示されません。
App2のディスパッチ関数の中で
SetForeGroundWindow()やSetWindowPos()や
ShowWindow()を呼んでも結果は変わりませんでした。
また、この現象はWin2000と、WinXpでしか出ず、
Win98などでは上記App2のメインウィンドウは
最前面に表示されます。
どなたかタスクバーを点滅させなくする方法、
または上記の現象を解消する方法をご存知
ないでしょうか。
環境はWinXp Pro VC++6.0 SP5 MFC(App)です。
よろしくお願いいたします。
SystemParametersInfo()でSPI_SETFOREGROUNDLOCKTIMEOUTで0に設定すると最前面に来るよ
うです。
この現象はWin98/2000~らしく、98は前面に来たという事ですので違うかもしれません。
見当違いの場合はご容赦下さいませ。
現在アクティブなウィンドウであれば、
他のウィンドウを前面に出すことができます。
App1からApp2を前面に出すようにはできませんか?
どうしてもApp2自身で行いたいならば、
以下に方法が紹介されています。
http://techtips.belution.com/ja/vc/0012/
ひろぴーさん、dairygoodsさん、回答ありがとうございます。
最初に教えていただいたSystemParametersInfo()を
使ってやってみようと思ったのですが
私の環境のWINVERが0x0400のため、
SPI_SETFOREGROUNDLOCKTIMEOUTおよび
SPI_GETFOREGROUNDLOCKTIMEOUTが
コンパイラに分かってもらえずできませんでした (T_T)
どうやら上記2つの定数が使えるのはWINVERが0x0500以降の
環境のようです。
(ちなみにdefineされてる値を直接指定してみてもだめでした。)
そこで、dairygoodsさんがおっしゃってるようにApp1側で
App2のウィンドウを前面に持ってくるようにしました。
具体的には
App1側でApp2のメインウィンドウをFindWindow()で取得し、
そのウィンドウをSetForgroundWindow()することで
Win98で実行したときととほぼ同じ動作をするようになりました。
ありがとうございました。