アクティブなウィンドウだけをタスクバーに表示 |
アクティブなウィンドウだけをタスクバーに表示する(2方法) (195) (196) | |
Form1・Form2・Form3とNo.195のサンプルは Module1 を用意しておいて下さい。 | |
Module1に記入して下さい。 Option Explicit 'SampleNo=195 WindowsXP VB6.0(SP5) 2002.08.26 'ウィンドウに関するデータを取得する(P59) Private Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long) As Long 'ウィンドウに関する属性を変更する(P60) Private Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) As Long '指定のウィンドウのサイズ、位置、Zオーダーを設定する(P100) Private Declare Function SetWindowPos Lib "user32" _ (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _ ByVal x As Long, ByVal y As Long, ByVal cx As Long, _ ByVal cy As Long, ByVal wFlags As Long) As Long Private Const GWL_EXSTYLE = (-20) '拡張ウィンドウスタイル(P61) Private Const HWND_TOP = 0 'Zオーダーのトップに置く(P100) Private Const SWP_NOMOVE = &H2 'サイズだけを変える(XとYは無視)(P101) Private Const SWP_NOSIZE = &H1 'サイズを変えない(CXとCYは無視)(P101) Private Const SWP_NOACTIVATE = &H10 'アクティブにしない(P101) Private Const SWP_HIDEWINDOW = &H80 '再描画のとき、非表示に(P101) Private Const SWP_SHOWWINDOW = &H40 '再描画のとき、再表示に(P101) Private Const WS_EX_APPWINDOW = &H40000 'アイコン化時タスクバーに表示する(P50) Public Sub DelTasklist(myForm As Form) 'タスクバーに表示しない Dim WStyle As Long Dim Result As Long '現在のスタイルを取得 WStyle = GetWindowLong(myForm.hwnd, GWL_EXSTYLE) 'それに拡張スタイルを付加する WStyle = WStyle And Not (WS_EX_APPWINDOW) 'ウィンドウを非表示に Result = SetWindowPos(myForm.hwnd, HWND_TOP, 0, 0, 0, 0, _ SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_HIDEWINDOW) '新しいスタイルを設定 Result = SetWindowLong(myForm.hwnd, GWL_EXSTYLE, WStyle) 'ウィンドウを再描画 Result = SetWindowPos(myForm.hwnd, HWND_TOP, 0, 0, 0, 0, _ SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW) End Sub Public Sub AppTasklist(myForm As Form) 'タスクバーに表示する Dim WStyle As Long Dim Result As Long '現在のスタイルを取得 WStyle = GetWindowLong(myForm.hwnd, GWL_EXSTYLE) 'それに拡張スタイルを付加する WStyle = WStyle Or WS_EX_APPWINDOW 'ウィンドウを非表示に Result = SetWindowPos(myForm.hwnd, HWND_TOP, 0, 0, 0, 0, _ SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_HIDEWINDOW) '新しいスタイルを設定 Result = SetWindowLong(myForm.hwnd, GWL_EXSTYLE, WStyle) 'ウィンドウを再描画 Result = SetWindowPos(myForm.hwnd, HWND_TOP, 0, 0, 0, 0, _ SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE Or SWP_SHOWWINDOW) End Sub Public Sub AppTasklist2(myForm As Form) 'タスクバーに表示する Dim WStyle As Long Dim Result As Long '現在のスタイルを取得 WStyle = GetWindowLong(myForm.hwnd, GWL_EXSTYLE) 'それに拡張スタイルを付加する WStyle = WStyle Or WS_EX_APPWINDOW 'ウィンドウを非表示に myForm.Hide '新しいスタイルを設定 Result = SetWindowLong(myForm.hwnd, GWL_EXSTYLE, WStyle) 'ウィンドウを再描画 myForm.Show End Sub Form1に記入して下さい。 Option Explicit 'SampleNo=195 WindowsXP VB6.0(SP5) 2002.08.25 Private Sub Form_Activate() AppTasklist Me End Sub Private Sub Form_Deactivate() '最小化した場合どのようにするか設定 If Me.WindowState <> vbMinimized Then DelTasklist Me 'タスクバーに表示する Else 'Me.WindowState = vbNormal '最小にしない 'AppTasklist2 Me '最小化したのを元に戻さないと他をアクティブに出来ない End If End Sub Private Sub Form_Load() Form2.Show Form3.Show End Sub Private Sub Form_Unload(Cancel As Integer) Dim myObject As Object For Each myObject In Forms Unload myObject Set myObject = Nothing Next Unload Me End Sub Form2・Form3に記入して下さい。 Option Explicit Private Sub Form_Activate() AppTasklist Me End Sub Private Sub Form_Deactivate() '最小化した場合どのようにするか設定 If Me.WindowState <> vbMinimized Then DelTasklist Me 'タスクバーに表示する Else 'Me.WindowState = vbNormal '最小にしない 'AppTasklist2 Me '最小化したのを元に戻さないと他をアクティブに出来ない End If End Sub |
|
上記方法は、最小化した場合、元に戻せません。従って最小化した場合どのようにするかで設定を 上記のようにする必要があります。 |
|
ITaskbarListを使う方法 '別途 プロジェクト→参照設定→ITaskbarList.tlb に参照設定して下さい TaskbarList.tlbは下記アドレスからDLして下さい。 http://www.msjogren.net/dotnet/eng/samples/vb6_taskbarlist.asp taskbarlist.zip の中に入ってます。 Option Explicit 'SampleNo=196 WindowsXP VB6.0(SP5) 2002.08.27 Private Sub Form_Activate() Dim objTaskbar As New TaskbarList 'タスクバー・リスト・オブジェクトを初期化します objTaskbar.HrInit 'タスクバー上のアイテムを表示します(ウィンドウはアクティブになりません) objTaskbar.AddTab Me.hWnd objTaskbar.ActivateTab Me.hWnd 'ウィンドウをアクティブにします。 Set objTaskbar = Nothing '参照を解放 End Sub Private Sub Form_Deactivate() Dim objTaskbar As New TaskbarList objTaskbar.HrInit objTaskbar.DeleteTab Me.hWnd 'タスクバーから削除 Set objTaskbar = Nothing End Sub Private Sub Form_Load() '別途 プロジェクト→参照設定→ITaskbarList.tlb に参照設定して下さい Form2.Show Form3.Show End Sub Form2とForm3の両方に記入して下さい。 Option Explicit Private Sub Form_Activate() Dim objTaskbar As New TaskbarList objTaskbar.HrInit objTaskbar.AddTab Me.hWnd objTaskbar.ActivateTab Me.hWnd Set objTaskbar = Nothing End Sub Private Sub Form_Deactivate() Dim objTaskbar As New TaskbarList objTaskbar.HrInit objTaskbar.DeleteTab Me.hWnd Set objTaskbar = Nothing End Sub |
|
ITaskbarListを使う方法で実現 サンプルを見た時には、これは複雑と思い、手を付けなかったが MS さんにアドバイスを受けながら解析してみると、なんと簡単に実現できました。 (掲示板のログNo.211〜225にかけてを参照) |
2003/05/11