アプリ版:「スタンプのみでお礼する」機能のリリースについて

visual basic 2008 Express Editionを使用しています。

タスクアイコンの数を変数として持つには、どのようなコードを書けばよいでしょうか。

A 回答 (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
    • good
    • 0

>タスクバーアイコンと書いてしまいましたが、ボタンの数です。


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

ウィンドウの有無を調べ、それで何をしたいのかが問題かと思うのですが?
API の知識は皆無 との事なので、API を使った方法は何をしたいかにもよりますが、結構複雑な
処理が求められますので、この際あきらめた方がよさそうです。

MS の Word がインストールされている環境なら、Word の Tasks コレクション を使用すれば
API を使用せずとも簡単に(数行程度のプログラムで)取得する事ができます。

いずれにしても、ウィンドウの有無を調べ、それで何をしたいのかによっても違った方法が
あるかも知れませんし、上記の方法で取得しても貴方の思っている処理ができるかは解りません。
(但し、現在の質問内容には答えられていると思います。)
    • good
    • 0

タスクトレイ(タスクバーの通知領域)のアイコンのことでしょうかね?


タスクトレイであれば、↓のような感じです・・・。

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 のバージョンによってやり方をかえなきゃならないです。
    • good
    • 0

間違っているかもしれませんが。

。。

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

いずれにせよ Windows API の知識が要るでしょう。

この回答への補足

タスクバーアイコンと書いてしまいましたが、ボタンの数です。

タスクバーに表示されているウィンドウの有無を調べられたらと思っています。

ちなみに、Windows API の知識は皆無です。

補足日時:2010/11/13 14:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!