none
Windows7でのタスクバー非表示

    質問

  • Windows7でタスクバーを非表示にさせるために

    以下のように作成しました。

    タスクバーは非表示なりましたが、連続表示していると、「スタート」の部分のみが

    ある時間以降表示されるようになりました。

    ウィルスセキュリティソフトで更新するときなど、何かOSからのメッセージ表示?

    などの動作が起こったときに「スタート」部分が表示されだすような気がします。

    何か情報お持ちの方いらっしゃいますか?

    対策などありましたら、お教えください。

    Public Sub TaskBar(blnValue As Boolean)
    'Windowsタスクバーの表示・非表示
    'in   blnValue  True: 表示,  False: 非表示
        Dim lngHandle As Long
       
        lngHandle = FindWindow("Shell_TrayWnd", "")
       
        If blnValue Then
            ShowWindow lngHandle, 5 'タスクバー表示
        Else
            ShowWindow lngHandle, 0 'タスクバー非表示
        End If   
    End Sub

    2010年9月1日 1:14

回答

  • こんな感じでしょうか。

    ところで、VB6のサンプルを参考にされたのでしょうか?
    VB6とVB.NETではLongのサイズが違うのでIntPtrをお使いください。 

     Private Const SW_SHOW As Integer = 5
     Private Const SW_HIDE As Integer = 0
    
     Public Declare Auto Function FindWindow Lib "USER32.DLL" ( _
      ByVal lpClassName As String, _
      ByVal lpWindowName As String) As IntPtr
     Public Declare Auto Function ShowWindow Lib "USER32.DLL" ( _
      ByVal hWnd As IntPtr, ByVal nCmdShow As IntPtr) As Boolean 
    
     Dim m_bShow As Boolean = True
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Dim pHandle As IntPtr
      Dim pHandle2 As IntPtr
    
      pHandle = FindWindow("Shell_TrayWnd", vbNullString)
      pHandle2 = FindWindow("Button", "スタート")
    
      If m_bShow Then
       ShowWindow(pHandle, SW_HIDE) 'タスクバー非表示
       ShowWindow(pHandle2, SW_HIDE) 'スタートボタン非表示
      Else
       ShowWindow(pHandle, SW_SHOW) 'タスクバー表示
       ShowWindow(pHandle2, SW_SHOW) 'スタートボタン表示
      End If
      m_bShow = Not m_bShow
     End Sub
    
    【ご参考】
    Win32 APIやDLL関数を呼び出すには?
    2010年9月1日 12:34
  • ちょっと気になったので。

    なぜかVista以降スタートボタンはShell_TrayWndではなく、デスクトップの直下にいます 

    確かに、そのように設計が変わった正確な理由は不明です。(タスクバーの見直しに絡んでいるとは思います)
    しかし、過去の Windows における設計、そしてそれに基づいたやり方は、ドキュメントなどで保障されていないものではないでしょうか。

    保障されていないことに頼っている場合、新しいバージョンの Windows が出たときに今までのロジックが通用しなくなるのは当然かと思います。
    また、今回の新たな設計も次の Windows では見直されるかもしれないので、”一時的に使えるものに過ぎない”という認識を持つべきでしょう。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年9月1日 14:46

すべての返信

  • Spyで覗いていただければ分かりますが、なぜかVista以降スタートボタンはShell_TrayWndではなく、デスクトップの直下にいます、ですので、こちらも消してやってください。

     

    2010年9月1日 12:05
  • こんな感じでしょうか。

    ところで、VB6のサンプルを参考にされたのでしょうか?
    VB6とVB.NETではLongのサイズが違うのでIntPtrをお使いください。 

     Private Const SW_SHOW As Integer = 5
     Private Const SW_HIDE As Integer = 0
    
     Public Declare Auto Function FindWindow Lib "USER32.DLL" ( _
      ByVal lpClassName As String, _
      ByVal lpWindowName As String) As IntPtr
     Public Declare Auto Function ShowWindow Lib "USER32.DLL" ( _
      ByVal hWnd As IntPtr, ByVal nCmdShow As IntPtr) As Boolean 
    
     Dim m_bShow As Boolean = True
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      Dim pHandle As IntPtr
      Dim pHandle2 As IntPtr
    
      pHandle = FindWindow("Shell_TrayWnd", vbNullString)
      pHandle2 = FindWindow("Button", "スタート")
    
      If m_bShow Then
       ShowWindow(pHandle, SW_HIDE) 'タスクバー非表示
       ShowWindow(pHandle2, SW_HIDE) 'スタートボタン非表示
      Else
       ShowWindow(pHandle, SW_SHOW) 'タスクバー表示
       ShowWindow(pHandle2, SW_SHOW) 'スタートボタン表示
      End If
      m_bShow = Not m_bShow
     End Sub
    
    【ご参考】
    Win32 APIやDLL関数を呼び出すには?
    2010年9月1日 12:34
  • ちょっと気になったので。

    なぜかVista以降スタートボタンはShell_TrayWndではなく、デスクトップの直下にいます 

    確かに、そのように設計が変わった正確な理由は不明です。(タスクバーの見直しに絡んでいるとは思います)
    しかし、過去の Windows における設計、そしてそれに基づいたやり方は、ドキュメントなどで保障されていないものではないでしょうか。

    保障されていないことに頼っている場合、新しいバージョンの Windows が出たときに今までのロジックが通用しなくなるのは当然かと思います。
    また、今回の新たな設計も次の Windows では見直されるかもしれないので、”一時的に使えるものに過ぎない”という認識を持つべきでしょう。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2010年9月1日 14:46
  • フォローありがとうございました 確かに、ウィンドウを「スタート」などと取得してみたり、FindWindowそのものすらいつまでも使えるかどうか分かりませんね。 現状の日本語版ははこうなっているとお考えください。
    2010年9月1日 15:41
  • こんにちは、すけさん さん。

    フォーラム オペレーターの山本です。MSDN フォーラムのご利用ありがとうございます。

    その後いかがでしょうか。
    Chuki さんや、Azulean さんからの回答はご確認いただけましたか?

    Chuki さん、Azulean さん情報ありがとうございます。お二人からの投稿は有効な情報であると思われましたので、勝手ながら私のほうで回答としてマークさせていただきました。

    同じ問題でこのスレッドを参照される方にも、有効な情報を見つけやすくなるかと思いますので、いただいた回答の中で、解決に役立った回答や参考になった回答には回答としてマークすることをお願いしていますので、よろしくお願いいたします。

    すけさん さん、もし、まだ解決されていない場合には、詳細をご連絡いただいて、ご質問を続けてくださいね。
    今後とも、MSDN フォーラムをよろしくお願いいたします。それでは。
                                        
    マイクロソフト株式会社 フォーラム オペレーター 山本 春海
    2010年9月13日 4:42