タスクバーでのタスクの点滅について – プログラミング – Home

タスクバーでのタスクの点滅について
 
通知
すべてクリア

[解決済] タスクバーでのタスクの点滅について


Aquarium
 Aquarium
(@Aquarium)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

お世話になります。
いま、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)です。
よろしくお願いいたします。


引用未解決
トピックタグ
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

SystemParametersInfo()でSPI_SETFOREGROUNDLOCKTIMEOUTで0に設定すると最前面に来るよ
うです。
この現象はWin98/2000~らしく、98は前面に来たという事ですので違うかもしれません。
見当違いの場合はご容赦下さいませ。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

現在アクティブなウィンドウであれば、
他のウィンドウを前面に出すことができます。
App1からApp2を前面に出すようにはできませんか?

どうしてもApp2自身で行いたいならば、
以下に方法が紹介されています。
http://techtips.belution.com/ja/vc/0012/


返信引用
Aquarium
 Aquarium
(@Aquarium)
ゲスト
結合: 22年前
投稿: 29
Topic starter  

ひろぴーさん、dairygoodsさん、回答ありがとうございます。

最初に教えていただいたSystemParametersInfo()を
使ってやってみようと思ったのですが
私の環境のWINVERが0x0400のため、
SPI_SETFOREGROUNDLOCKTIMEOUTおよび
SPI_GETFOREGROUNDLOCKTIMEOUTが
コンパイラに分かってもらえずできませんでした (T_T)

どうやら上記2つの定数が使えるのはWINVERが0x0500以降の
環境のようです。
(ちなみにdefineされてる値を直接指定してみてもだめでした。)

そこで、dairygoodsさんがおっしゃってるようにApp1側で
App2のウィンドウを前面に持ってくるようにしました。

具体的には
App1側でApp2のメインウィンドウをFindWindow()で取得し、
そのウィンドウをSetForgroundWindow()することで
Win98で実行したときととほぼ同じ動作をするようになりました。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました