• ベストアンサー

VBでタスクバーアイコンの数を取得するには?

visual basic 2008 Express Editionを使用しています。 タスクアイコンの数を変数として持つには、どのようなコードを書けばよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)

回答No.3

>タスクバーアイコンと書いてしまいましたが、ボタンの数です。 >タスクバーに表示されているウィンドウの有無を調べられたらと思っています。 >ちなみに、Windows API の知識は皆無です。 ウィンドウの有無を調べ、それで何をしたいのかが問題かと思うのですが? API の知識は皆無 との事なので、API を使った方法は何をしたいかにもよりますが、結構複雑な 処理が求められますので、この際あきらめた方がよさそうです。 MS の Word がインストールされている環境なら、Word の Tasks コレクション を使用すれば API を使用せずとも簡単に(数行程度のプログラムで)取得する事ができます。 いずれにしても、ウィンドウの有無を調べ、それで何をしたいのかによっても違った方法が あるかも知れませんし、上記の方法で取得しても貴方の思っている処理ができるかは解りません。 (但し、現在の質問内容には答えられていると思います。)

回答No.2

タスクトレイ(タスクバーの通知領域)のアイコンのことでしょうかね? タスクトレイであれば、↓のような感じです・・・。 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 のバージョンによってやり方をかえなきゃならないです。

noname#259269
noname#259269
回答No.1

間違っているかもしれませんが。。。 タスクバーに表示されているアイコンの数というのは、現在表示されているウィンドウの数(ただしタスクバーに表示されないものもあるのでそれは除外)なので、 EnumWindow などの API で、現在表示されているウィンドウをすべて調べてタスクバーに表示すると指定されているウィンドウを抜き出せばよいのでは、と思います。で、場合によってはグループ化する、と。 いずれにせよ Windows API の知識が要るでしょう。

otameshi_001
質問者

補足

タスクバーアイコンと書いてしまいましたが、ボタンの数です。 タスクバーに表示されているウィンドウの有無を調べられたらと思っています。 ちなみに、Windows API の知識は皆無です。

関連するQ&A