ITaskbarListによるタスクバーへのウィンドウの登録・削除

■ITaskbarListによるタスクバーへのウィンドウの登録・削除を行う関数

タスクバーにウィンドウを登録する関数

/**
 * タスクバーにウィンドウを登録する
 * @param hnd ウィンドウハンドル
 */
void AddTaskBarBtn(HWND hnd)
{
  ITaskbarList* TaskbarList;
  CoCreateInstance(CLSID_TaskbarList,
    0, 
    CLSCTX_INPROC_SERVER,
    IID_ITaskbarList,
    (void**)&TaskbarList);
  //タスクバーリストオブジェクトを初期化する
  TaskbarList->HrInit();
  //タスクバーにウィンドウを登録する
  TaskbarList->AddTab(hnd);
  //アクティブにする
  TaskbarList->ActivateTab(hnd);
}

タスクバーからウィンドウを削除する関数

/**
 * タスクバーからウィンドウを削除する
 * @param hnd ウィンドウハンドル
 */
void DelTaskBarBtn(HWND hnd)
{
  ITaskbarList* TaskbarList;
  CoCreateInstance(CLSID_TaskbarList,
    0, 
    CLSCTX_INPROC_SERVER,
    IID_ITaskbarList,
    (void**)&TaskbarList);
  //タスクバーリストオブジェクトを初期化する
  TaskbarList->HrInit();
  //タスクバーから項目を削除する
  TaskbarList->DeleteTab(hnd);
}

■サンプルプログラム

メインフォームでサブウィンドウを表示するようにします。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  (new TForm2(this))->Show();
}

サブフォームのOnActiveOnイベントでAddTaskBarBtn関数を実行すると、サブウィンドウをタスクバーに表示することができます。

static int i = 2;
__fastcall TForm2::TForm2(TComponent* Owner)
  : TForm(Owner)
{
  Caption = IntToStr(i++);
}
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  Action = caFree;
}
void __fastcall TForm2::FormActivate(TObject *Sender)
{
  AddTaskBarBtn(this->Handle);
}

さらにOnDeactivateイベントでDelTaskBarBtn関数を実行すると、サブウィンドウの中でアクティブなウィンドウだけをタスクバーに表示できます。

static int i = 2;
__fastcall TForm2::TForm2(TComponent* Owner)
  : TForm(Owner)
{
  Caption = IntToStr(i++);
}
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  Action = caFree;
}
void __fastcall TForm2::FormActivate(TObject *Sender)
{
  AddTaskBarBtn(this->Handle);
}
void __fastcall TForm2::FormDeactivate(TObject *Sender)
{
  DelTaskBarBtn(this->Handle);
}

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください