- 日時: 2011/03/31 19:01
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[他のアプリ関係][システム関係][ファイル] * * キーワード:タスクバー,現在表示しているウィンドウ,タイトル,ウィンドタイトル * *********************************************************************************** タイトル : タスクバーのGETITEMCOUNTが取れません。 記 事 No : 10478 投 稿 日 : 2011/03/30(Wed) 15:18 元質問者 : camputer
現在開いているテキストファイル名の一覧を作成いたしたく「タスクバー上のボタン名一覧を 取得すればよいのかな」などと考えまして....。
----------------------------------------------------------------------------------- 記事No : 10483 投稿日 : 2011/03/30(Wed) 20:52 回答者 : 花ちゃん ----------------------------------------------------------------------------------- >現在開いているテキストファイル名の一覧を作成いたしたく
ちょっと試しに作ってみました。(すべてのトップレベルウィンドウを列挙)
VB2010 / Windows 7 ですが、OS に左右されないかと Word (複数のTXT ファイルを読み込み表示) /メモ帳 /ワードパッド で表示して確認
Imports System.Runtime.InteropServices
Public Class Form1
'トップレベルウィンドウのハンドルを列挙する <DllImport("User32.dll")> _ Private Shared Function EnumWindows( _ ByVal lpEnumFunc As EnumWindowsProc, _ ByVal lParam As IntPtr) As Boolean End Function
'EnumWindows 関数のコールバック関数 Private Delegate Function EnumWindowsProc( _ ByVal hWnd As IntPtr, _ ByVal lParam As IntPtr) As Boolean
'ウィンドウのキャプションタイトルを取得する <DllImport("User32.dll", CharSet:=CharSet.Auto)> _ Private Shared Function GetWindowText( _ ByVal hwnd As IntPtr, _ ByVal lpString As System.Text.StringBuilder, _ ByVal cch As Integer) As Integer End Function
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click 'すべてのトップレベルウィンドウを列挙(この方が簡単なので) EnumWindows(AddressOf EnumTopLevelWindows, IntPtr.Zero) End Sub
Private Function EnumTopLevelWindows(ByVal hWnd As IntPtr, ByVal lParam As IntPtr) As Boolean Dim buf As New System.Text.StringBuilder(256) 'ウィンドウのタイトルバーのテキストを取得 Dim n As Integer = GetWindowText(hWnd, buf, buf.MaxCapacity) ' Debug.Print(String.Format("ハンドル:{0} タイトル:{1} ", hWnd, buf.ToString())) If n > 0 Then 'タイトルの無いウィンドウは除外 Dim winText As String = buf.ToString() 'タイトルに、.txt が含まれているものだけを取得 If winText.IndexOf(".txt") > 0 Then 'テキストファイル名だけを抜き出し Debug.Print(winText.Substring(0, winText.IndexOf(".txt") + 4)) End If End If Return True '列挙を続ける False で中止 End Function
End Class
------------------------------------------------------------------------------------------------ 上記サンプルで、現在起動している全てのアプリ等(トップレベルウィンドウ)のハンドルが取得できます。
因みに私の環境で、特にアプリを起動していない状態で、430 件以上のハンドルが取得でき、その内の 半数が、WindowText を持っております。 どのようなものが取得できるのか興味があれば、上記を試して見てください。
|