タスクバーのアイコンを点滅させるには

解決


Syake  2006-08-31 19:20:38  No: 23047

皆様、大変お世話になっております。

タスクバーのアイコンがオレンジで点滅することがあります。
(WinXPだけでもなかったような・・・)
例えば、起動に時間のかかるアプリケーション(A)を先に起動を指示後
直ぐに、起動の早いアプリケーション(B)を立ち上げたとします。
アプリケーション(B)の起動が完了しアクティブになっている時に、ア
プリケーション(B)の起動が完了した場合などです。

これを、プログラムから強制的に点滅・消灯させたりできるのでしょう
か?  
(複数アプリを起動している場合、あるタイミングで注意を喚起したい)
可能・無理に係わらず、ご存知の方がおられましたらご教授下さい。
よろしくお願いします。


Syake  2006-08-31 19:25:45  No: 23048

すいません。
>アプリケーション(B)の起動が完了しアクティブになっている時に、ア
>プリケーション(B)の起動が完了した場合などです。
アプリケーション(A)の起動が完了しアクティブになっている時に、ア
プリケーション(B)の起動が完了した場合などです。
間違ってました。


にしの  2006-08-31 21:05:29  No: 23049

APIのFlashWindowでしょうか。


F.N.  2006-08-31 21:17:45  No: 23050

こんな感じで・・・

procedure TForm1.Button1Click(Sender: TObject);
var
  flashinfo: TFLASHWINFO;
begin
  with flashinfo do begin
    cbSize := SizeOf(flashinfo);
    dwFlags := $1;
    hWnd := Handle;
    uCount := 10;
    dwTimeout := 500;
  end;
  FlashWindowEx(flashinfo);
end;

参考:
http://www.winapi-database.com/Window/Change/FlashWindowEx.html


not タイトルバー  2006-08-31 22:56:07  No: 23051

「タスクバー」のアイコンを点滅(アニメーション)させるには、
複数のアイコンイメージを用意して、タイマーで Application.Iconを切り換えるしかないのでは?(「タイトルバー」のアイコンも一緒に点滅しちゃうけど)


Syake  2006-09-01 18:47:36  No: 23052

皆様、返答が遅れてしまいました。

にしのさん、F.N.さんありがとうございます。
FlashWindowで、もしかしたらと考えたのですがタスクバーのアイコン
までは一緒に点滅してくれませんでした。

not タイトルバーさん、ありがとうございます。
当方のアプリでも状態によってタイトルバーのアイコンは点滅するので
多分OS側で単純に制御しているだけだと思うのですが、それが判れば、
プログラム側で制御できるのかなと思った次第です。
非公開というか、その方法しか無理なのかな?

色々、見てはいるのですがWindowsでどうやってるのかも判りません。


Syake  2006-09-01 18:51:35  No: 23053

皆様、すいません。
F.N.さんの
http://www.winapi-database.com/Window/Change/FlashWindowEx.html
に、ありましたね。
ちょっとお時間ください。


Syake  2006-09-01 19:14:59  No: 23054

//FlashWindowEX

procedure TForm1.Button1Click(Sender: TObject);
var
  flashinfo: TFLASHWINFO;
begin
  with flashinfo do begin
    cbSize := SizeOf(flashinfo);
    dwFlags := $2;//FLASH_TRAYでは、何も起こらない
    // $1 は正常に動作する。
    // 試しに $1 or $2 でもタイトルバーの点滅のみ
    hWnd := Handle;
    uCount := 10;
    dwTimeout := 500;
  end;
  FlashWindowEx(flashinfo);
end;
上手くいくかなと思いましたが駄目でした。(;_;)
D2006Ent、WinXPSP2


F.N.  2006-09-01 22:32:44  No: 23055

こんな感じで・・・

procedure TForm1.Button1Click(Sender: TObject);
var
  fwi1, fwi2: TFLASHWINFO;
begin

  //ウィンドウのタイトルバー
  with fwi1 do begin
    cbSize := SizeOf(fwi1);
    dwFlags := $1;
    hWnd := Handle;
    uCount := 10;
    dwTimeout := 500;
  end;
  FlashWindowEx(fwi1);

  /タスクバーのボタン
  with fwi2 do begin
    cbSize := SizeOf(fwi2);
    dwFlags := $2;
    hWnd := Application.Handle;
    uCount := 10;
    dwTimeout := 500;
  end;
  FlashWindowEx(fwi2);

end;

WindowsXP SP2, Delphi6 Personal でうまくいきましたよ


Syake  2006-09-02 00:00:30  No: 23056

F.N.さん、大変ありがとうございました。m(__)m

procedure TForm1.Button1Click(Sender: TObject);
var
  flashinfo: TFLASHWINFO;
begin
  with flashinfo do begin
    cbSize := SizeOf(flashinfo);
    dwFlags := $2
    //hWnd := Handle;
    hWnd := Application.Handle;//ここ
    uCount := 10;
    dwTimeout := 500;
  end;
  FlashWindowEx(flashinfo);
end;
で、上手くいきました。
お騒がせいたしました。


Syake  2006-09-02 00:01:15  No: 23057

またやってしまいました。
解決忘れてました。


えーと  2006-09-02 00:01:24  No: 23058

これはアクティブじゃないアプリが自分をアクティブにしようとするとなるようです。

Form1 に ApllicationEvents1 を置いて、OnDeactivate イベントハンドラを

procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
  SetForegroundWindow(Application.Handle);
end;

にするだけです。実行して、メモ帳などの他アプリをマウスでクリックしてみてください。


F.N.  2006-09-02 00:14:56  No: 23059

これのせいでアクティブにしたいときに困るんですよね・・・


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加