現在起動しているアプリケーションのウィンドウ名とハンドルを
列挙して表示することは可能でしょうか。
ウィンドウ名とハンドルの取得
Re: ウィンドウ名とハンドルの取得
> 現在起動しているアプリケーションのウィンドウ名とハンドルを
> 列挙して表示することは可能でしょうか。
まさにウィンドウを列挙するEnumWindows()関数というのが存在します。
全てのウインドウを列挙する
追記。
EnumWindows()関数使ったことがなかったのでリンクの紹介だけだったんですけど、動かしてみたのでコードを提示することもできます。
> 列挙して表示することは可能でしょうか。
まさにウィンドウを列挙するEnumWindows()関数というのが存在します。
全てのウインドウを列挙する
追記。
EnumWindows()関数使ったことがなかったのでリンクの紹介だけだったんですけど、動かしてみたのでコードを提示することもできます。
> 上手くいきませんでした。コードをお願いします。
何をして上手くいかなかったんでしょう?
何をして上手くいかなかったんでしょう?
関数の宣言 [ここをクリックすると内容が表示されます]
コード: 全て選択
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long,ByVal lPalam As LPARAM) As BOOL
ウィンドウプロシージャの定義 [ここをクリックすると内容が表示されます]
コード: 全て選択
Function EnumWndProc(ByVal hWnd As HWND,ByVal lParam As LPARAM) As BOOL
' 各ウィンドウに対してしたい処理
' -----ここまで-----
EnumWndProc=TRUE
End Function
全てのウィンドウを列挙 [ここをクリックすると内容が表示されます]
コード: 全て選択
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
EnumWindows(AddressOf(EnumWndProc),0)
End Sub
> 説明不足すみません。
説明不足過ぎですね( ̄□ ̄;)
リストボックスに項目を追加するには LB_ADDSTRING をリストボックスに送信してやります。
説明不足過ぎですね( ̄□ ̄;)
リストボックスに項目を追加するには LB_ADDSTRING をリストボックスに送信してやります。
コード: 全て選択
Function EnumWndProc(ByVal hWnd As HWND,ByVal lParam As LPARAM) As BOOL
Dim wndName As BytePtr ' ウィンドウ名を持つ
Dim length As Long ' NULLを含むウィンドウ名の長さを持つ
length=GetWindowTextLength(hWnd)+1
wndName=calloc(length)
If GetWindowTextLength(hWnd,wndName,length) Then
SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_ADDSTRING,NULL,wndName)
End If
free(wndName)
EnumWndProc=TRUE
End Function