tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
現在開いているテキストファイル名の一覧を取得(VB.NET) ( No.0 )  [親スレッドへ]
日時: 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 を持っております。
どのようなものが取得できるのか興味があれば、上記を試して見てください。



 [スレッド一覧へ] [親スレッドへ]