サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.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 を持っております。 どのようなものが取得できるのか興味があれば、上記を試して見てください。 
  
  
 |