Windows 7で導入されたITaskbarList3インターフェイスを使用して、タスクバーアイコンに長いタスクのタスクの進行状況を表示できるようにしようとしています。ドキュメントには、ITaskbarList3コンポーネントを初期化する前に、TaskbarButtonCreatedメッセージを待つ必要があると記載されていますが、TaskbarButtonCreatedメッセージが表示されないようです。
これが私がこれまでに持っているものです:
TaskbarButtonCreatedのカスタムメッセージIDを格納するためのグローバル変数が.cppファイルにあります。
static const UINT m_uTaskbarBtnCreatedMsg =
RegisterWindowMessage( _T("TaskbarButtonCreated") );
新しいメッセージを処理するために、別のWndProc関数を作成しました。
void __fastcall TForm1::WndProcExt(TMessage &Message)
{
if(Message.Msg == uTaskbarBtnCreatedMsg && uTaskbarBtnCreatedMsg != 0) {
OnTaskbarBtnCreated();
}
else {
WndProc(Message);
}
}
私のフォームコンストラクターでは、最初の行でWindowProcプロパティをWndProcExtに設定して、メッセージをルーティングします。また、ChangeWindowMessageFilterを投げて、TaskbarButtonCreatedメッセージが何らかの理由でフィルタリングされているかどうかを確認しました。
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
WindowProc = WndProcExt;
ChangeWindowMessageFilterEx(Handle, uTaskbarBtnCreatedMsg, MSGFLT_ALLOW, NULL);
...
}
デバッガーでは、ChangeWindowMessageFilterExからの戻り値は常にtrueです。また、WndProcExt関数が、探しているものだけでなく、あらゆる種類のWindowsメッセージを受信することを確認しました。OnTaskbarBtnCreated関数が呼び出されることはありません。
私は一歩を逃していますか?メッセージハンドラーの準備が整う前に、メッセージがフィルターで除外または送信されていますか?