実行アプリケーションのクラス名・キャプション列挙          <TOP>


実行アプリケーションのクラスメイトキャプションを列挙します。

GetClassName ウィンドウのクラス名を取得

GetDesktopWindow Windows のデスクトップ ウィンドウを識別

GetWindow 指定されたウィンドウと指定された関係にあるウィンドウのハンドルを取得

GetWindowLong 指定されたウィンドウに関しての情報を取得

GetWindowText ウィンドウのタイトル文字列を取得

 

 

'================================================================
'= 実行アプリケーションのクラス名・キャプション列挙
'=    (ClassNameCaption.bas)
'================================================================
#include "Windows.bi"

' ウィンドウのクラス名を取得
Declare Function Api_GetClassName& Lib "user32" Alias "GetClassNameA" (ByVal hWnd&, ByVal lpClassName$, ByVal nMaxCount&)

' Windows のデスクトップ ウィンドウを識別。返されるポインタは、一時的なポインタ。後で使用するために保存しておくことはできない
Declare Function Api_GetDesktopWindow& Lib "user32" Alias "GetDesktopWindow" ()

' 指定されたウィンドウと指定された関係にあるウィンドウのハンドルを取得
Declare Function Api_GetWindow& Lib "user32" Alias "GetWindow" (ByVal hWnd&, ByVal wCmd&)

' 指定されたウィンドウに関しての情報を取得。また、拡張ウィンドウメモリから、指定されたオフセットにある32ビット値を取得することもできる
Declare Function Api_GetWindowLong& Lib "user32" Alias "GetWindowLongA" (ByVal hWnd&, ByVal nIndex&)

' ウィンドウのタイトル文字列を取得
Declare Function Api_GetWindowText& Lib "user32" Alias "GetWindowTextA" (ByVal hWnd&, ByVal lpString$, ByVal cch&)

#define mcGWCHILD 5
#define mcGWHWNDNEXT 2
#define mcGWLSTYLE (-16)
#define mcWSVISIBLE &H10000000
#define mconMAXLEN 255

Var Shared List1 As Object
Var Button1 As Object

List1.Attach GetDlgItem("List1") : List1.SetFontSize 12
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'= クラス名取得
'================================================================
Declare Function fGetClassName(hWnd As Long) As String
Function fGetClassName(hWnd As Long) As String
    Var strBuffer As String
    Var intCount As Integer
   
    strBuffer = String$(mconMAXLEN - 1, 0)
    intCount = Api_GetClassName(hWnd, strBuffer, mconMAXLEN)
    If intCount > 0 Then
        fGetClassName = Left$(strBuffer, intCount)
    End If
End Function

'================================================================
'= キャプション名取得
'================================================================
Declare Function fGetCaption(hWnd As Long) As String
Function fGetCaption(hWnd As Long) As String
    Var strBuffer As String
    Var intCount As Integer

    strBuffer = String$(mconMAXLEN - 1, 0)
    intCount = APi_GetWindowText(hWnd, strBuffer, mconMAXLEN)
    If intCount > 0 Then
        fGetCaption = Left$(strBuffer, intCount)
    End If
End Function

'================================================================
'= 取得表示部
'================================================================
Declare Function fEnumWindows()
Function fEnumWindows()
    Var lx As Long
    Var lLen As Long
    Var lStyle As Long
    Var sCaption As String
    
    lx = Api_GetDesktopWindow()
    lx = Api_GetWindow(lx, mcGWCHILD)

	List1.ResetContent    
    Do While Not lx = 0
        sCaption = fGetCaption(lx)
        If Len(sCaption) > 0 Then
            lStyle = Api_GetWindowLong(lx, mcGWLSTYLE)
            If lStyle And mcWSVISIBLE Then
                List1.AddString Left$("Class = " & fGetClassName(lx) & Space$(40), 40) & "Caption = " & fGetCaption(lx)
            End If
        End If
        lx = Api_GetWindow(lx, mcGWHWNDNEXT)
    Loop
End Function

'================================================================
'= 取得
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Ret As Long
    
    Ret = fEnumWindows
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End