- ベストアンサー
VBでタスクバーアイコンの数を取得するには?
visual basic 2008 Express Editionを使用しています。 タスクアイコンの数を変数として持つには、どのようなコードを書けばよいでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
取得したい物と違っているかも知れませんが一度下記を試して見て下さい。 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim localProcAll As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses() Dim p As System.Diagnostics.Process For Each p In localProcAll If p.MainWindowHandle <> IntPtr.Zero Then Debug.Print(p.ProcessName & " " & p.MainWindowTitle) End If Next End Sub
その他の回答 (3)
- vbhanatyan
- ベストアンサー率79% (70/88)
>タスクバーアイコンと書いてしまいましたが、ボタンの数です。 >タスクバーに表示されているウィンドウの有無を調べられたらと思っています。 >ちなみに、Windows API の知識は皆無です。 ウィンドウの有無を調べ、それで何をしたいのかが問題かと思うのですが? API の知識は皆無 との事なので、API を使った方法は何をしたいかにもよりますが、結構複雑な 処理が求められますので、この際あきらめた方がよさそうです。 MS の Word がインストールされている環境なら、Word の Tasks コレクション を使用すれば API を使用せずとも簡単に(数行程度のプログラムで)取得する事ができます。 いずれにしても、ウィンドウの有無を調べ、それで何をしたいのかによっても違った方法が あるかも知れませんし、上記の方法で取得しても貴方の思っている処理ができるかは解りません。 (但し、現在の質問内容には答えられていると思います。)
- tsukasa-12r
- ベストアンサー率65% (358/549)
タスクトレイ(タスクバーの通知領域)のアイコンのことでしょうかね? タスクトレイであれば、↓のような感じです・・・。 Public Class Form1 Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Integer, ByVal hwndChildAfter As Integer, ByVal lpszClass As String, ByVal lpszWindow As String) As Integer Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Integer, ByVal MSG As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer Private Const TB_BUTTONCOUNT = &H418 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim count As Integer count = GetTaskTrayIconCount() MessageBox.Show(count.ToString(), Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub Private Function GetTaskTrayIconCount() As Integer Dim hwnd As Integer = 0 hwnd = FindWindowEx(0, 0, "Shell_TrayWnd", vbNullString) If hwnd Then hwnd = FindWindowEx(hwnd, 0, "TrayNotifyWnd", vbNullString) If hwnd Then hwnd = FindWindowEx(hwnd, 0, "SysPager", vbNullString) If hwnd Then hwnd = FindWindowEx(hwnd, 0, "ToolbarWindow32", vbNullString) If hwnd Then Return SendMessage(hwnd, TB_BUTTONCOUNT, 0, 0) End If End If End If End If Return 0 End Function End Class タスクトレイじゃなくて、最小化したウィンドウが並ぶところだと、ちょっと面倒みたいです。 グループ化しているのとしていないのとで、数え方が変わるみたいですし、さらに、XP と Win7 とでは ウィンドウのクラスも違っているので、Windows のバージョンによってやり方をかえなきゃならないです。
間違っているかもしれませんが。。。 タスクバーに表示されているアイコンの数というのは、現在表示されているウィンドウの数(ただしタスクバーに表示されないものもあるのでそれは除外)なので、 EnumWindow などの API で、現在表示されているウィンドウをすべて調べてタスクバーに表示すると指定されているウィンドウを抜き出せばよいのでは、と思います。で、場合によってはグループ化する、と。 いずれにせよ Windows API の知識が要るでしょう。
補足
タスクバーアイコンと書いてしまいましたが、ボタンの数です。 タスクバーに表示されているウィンドウの有無を調べられたらと思っています。 ちなみに、Windows API の知識は皆無です。