「タスクバーの表示の有無」について

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
KICO

「タスクバーの表示の有無」について

#1 投稿記事 by KICO »

何時も、お世話に成っています。

「タスクバーを自動的に隠す」の状態で、現在、表示しているか隠れているかの判定、
サイズ変更時や表示位置の変更時の通知は出来るのですが、タスクバーが
「表示した」「隠れた」時点で、通知させる方法は無いでしょうか?


宜しくお願いします。
sk
記事: 11
登録日時: 2005年9月29日(木) 14:45
お住まい: 兵庫県
連絡する:

Re: 「タスクバーの表示の有無」について

#2 投稿記事 by sk »

多分これでできるはずです

コード: 全て選択

'API
Declare Function SHAppBarMessage Lib "shell32.dll" Alias "SHAppBarMessage" (ByVal dwMessage As Long,ByRef pData As APPBARDATA) As Long

'構造体
Type APPBARDATA
	cbSize As Long            '構造体のサイズ
	hWnd As Long              'タスクバーのウインドウのハンドル
	uCallbackMessage As Long  'コールバック関数へのポインタ
	uEdge As Long             'タスクバーの位置を示す次の定数
	rc As RECT                'タスクバーの矩形を示す RECT 構造体
	lParam As Long            'メッセージのパラメータ
End Type

'定数
Const ABE_LEFT   = 0 '左にある
Const ABE_TOP    = 1 '上にある
Const ABE_RIGHT  = 2 '右にある
Const ABE_BOTTOM = 3 '下にある

Const ABM_ACTIVATE = &H6         'タスクバーがアクティブ/非アクティブになった
Const ABM_GETAUTOHIDEBAR = &H7   '自動非表示のタスクバーのハンドル
Const ABM_GETSTATE = &H4         '自動非表示、トップ位置表示の状態を取得
Const ABM_GETTASKBARPOS = &H5    'タスクバーの位置とサイズ
Const ABM_NEW = &H0              '新しいタスクバーを登録する
Const ABM_QUERYPOS = &H2         'タスクバーの位置とサイズを調べる
Const ABM_REMOVE = &H1           'タスクバーを削除する
Const ABM_SETAUTOHIDEBAR = &H8   '自動非表示に設定・取消す
Const ABM_SETPOS = &H3           'タスクバーの位置とサイズを設定する
Const ABM_WINDOWPOSCHANGED = &H9 'タスクバーの位置が変わった
Const ABS_AUTOHIDE = &H1    '自動で隠す
Const ABS_ALWAYSONTOP = &H2 '常に手前に表示
Const APPBAR_CALLBACK = &H12f 'アプリケーションツールバーを使うときに使用
細かい使い方は知らないんで試行錯誤してください
KICO

Re: 「タスクバーの表示の有無」について

#3 投稿記事 by KICO »

sk様、ありがとうございます。

SHAppBarMessage関数のコールバックは、設定の変更やサイズ及び表示位置の変更時に通知は出来るのですが、
タスクバーが 「表示した」「隠れた」時点での、通知が出来無いのです。
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

Re: 「タスクバーの表示の有無」について

#4 投稿記事 by NoWest »

KICO さんが書きました:> SHAppBarMessage関数のコールバックは、設定の変更やサイズ及び表示位置の変更時に通知は出来るのですが、
> タスクバーが 「表示した」「隠れた」時点での、通知が出来無いのです。
タスクバーが 表示、非表示されるとき、SW_SHOW、SW_HIDEが使用されているのかと思ったら、実はタスクバー自体が画面の見えない部分に移動しているだけでした。(FindWindowでタスクバーを探してGetWindowRectで確認:XPだけなので別のOSではどうか分かりません。)

ですのでABM_GETTASKBARPOSを使用するか、私がやったようにGetWindowRectで監視する方法が考えられます。
KICO

Re: 「タスクバーの表示の有無」について

#5 投稿記事 by KICO »

NoWest様、何時もありがとう御座います。

(FindWindowでタスクバーを探してGetWindowRectで確認:XPだけなので別のOSではどうか分かりません。)
>
> ですのでABM_GETTASKBARPOSを使用するか、私がやったようにGetWindowRectで監視する方法が考えられます。

その場合、常時監視しなけりばならいので質問させて頂きました。


> 一説にはタスクバーが隠れたり現れたりする時に全てのウィンドウにシステムからある種のメッセージが送られてくると言う話も聞きますので
> そっちの方も調べてみます。


宜しくお願いします。
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

Re: 「タスクバーの表示の有無」について

#6 投稿記事 by NoWest »

KICO さんが書きました: > 一説にはタスクバーが隠れたり現れたりする時に全てのウィンドウにシステムからある種のメッセージが送られてくると言う話も聞きますので
> > そっちの方も調べてみます。
>
>
> 宜しくお願いします。

どうやら全てのウィンドウではなくシステムバーアプリケーションの全てに
送られるようです。(失礼しました。(^^;;;

ですので非表示のシステムバーアプリケーションを別途に作成しシステムに登録。その後、そのウィンドウのコールバック関数に送られるABN_~を取得すれば良いのでは?
KICO

Re: 「タスクバーの表示の有無」について

#7 投稿記事 by KICO »

NoWest様、ありがとう御座います。

> ですので非表示のシステムバーアプリケーションを別途に作成しシステムに登録。その後、そのウィンドウのコールバック関数に送られるABN_~を取得すれば良いのでは?

コールバック関数に送られるABN_~は、
 ABN_STATECHANGE  = 0 '設定の変更時
 ABN_POSCHANGED  = 1 'サイズ及び表示位置の変更時
 ABN_FULLSCREENAPP = 2 'lParam=0:? lParam=1:Windowsキー+"D"
 ABN_WINDOWARRANGE = 3 '?
以上の4つだけです。
返信する