C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

複数同一タイトルIE画面で最前面画面を取得する方法 /TanuTanu (19/08/06(Tue) 20:31) #91830
Re[1]: 複数同一タイトルIE画面で最前面画面を取得する方法 /魔界の仮面弁士 (19/08/06(Tue) 21:57) #91832
  └ Re[2]: 複数同一タイトルIE画面で最前面画面を取得する方法 /TanuTanu (19/08/07(Wed) 14:14) #91847 解決済み


親記事 / ▼[ 91832 ]
■91830 / 親階層)  複数同一タイトルIE画面で最前面画面を取得する方法
□投稿者/ TanuTanu (44回)-(2019/08/06(Tue) 20:31:32)
TanuTanu さんの Web サイト

分類:[.NET 全般] 

いつもお世話になっております。

InternetExplorerで複数の同一タイトルで最前面に表示されているオブジェクトを取得したいのですが
いろいろ試したのですがハンドルは空いてるものを割り当ててしまうのでハンドルの大小でも判別できず
困っております。

Zオーダーを駆使すれば出来そうなのですが方法が解りません。
ご教授の程宜しくお願いいたします。

IE−タイトル:TEST
IE−タイトル:TEST
IE−タイトル:TEST・・・これが最前面

*************************

使用しているコード、API抜粋

For Each objIE In aShell
 If objIE.LocationName = "TEST" THEN
  WIN = objIE
 End If
Next

'キャプション:TESTを全て検出
EnumWindows(New EnumWindowsDelegate(AddressOf EnumWindowCallBack), IntPtr.Zero)
[ □ Tree ] 返信 編集キー/

▲[ 91830 ] / ▼[ 91847 ]
■91832 / 1階層)  Re[1]: 複数同一タイトルIE画面で最前面画面を取得する方法
□投稿者/ 魔界の仮面弁士 (2279回)-(2019/08/06(Tue) 21:57:46)
No91830 (TanuTanu さん) に返信
> InternetExplorerで複数の同一タイトルで最前面に表示されているオブジェクトを取得したいのですが
> いろいろ試したのですがハンドルは空いてるものを割り当ててしまうのでハンドルの大小でも判別できず
> 困っております。

ShellWindows で列挙するまではできているのですよね。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=47389&KLOG=80


個々の InternetExplorer オブジェクトは HWND プロパティで識別できるので、
下記のように GetWindow( GetDesktopWindow(), GW_CHILD ) の API で取得できないでしょうか。
https://teratail.com/questions/152953

表示されているタブ単位での判断も必要な場合は UIAutomationClient 併用で。
[ 親 91830 / □ Tree ] 返信 編集キー/

▲[ 91832 ] / 返信無し
■91847 / 2階層)  Re[2]: 複数同一タイトルIE画面で最前面画面を取得する方法
□投稿者/ TanuTanu (45回)-(2019/08/07(Wed) 14:14:29)
TanuTanu さんの Web サイト
魔界の仮面弁士 様

いつもお世話になっております。
ご教授頂いた事で何とかクリア出来ました^^
ありがとうございます。

Dim CNT As Integer = 2
Dim TEST_TRUE As Boolean = False
Dim Wnd(100) As IntPtr


Wnd(1) = GetDesktopWindow()
Debug.WriteLine("デスクトップ画面 : " & Convert10to16(Wnd(1)).ToString)

Wnd(2) = GetWindow(Wnd(1), 5)
Debug.WriteLine("デスクトップ子画面トップ: " & Convert10to16(Wnd(2)).ToString)


Do

Wnd(CNT + 1) = GetWindow(Wnd(CNT), 2)

Debug.WriteLine(CNT & " : " & Convert10to16(Wnd(CNT + 1)).ToString)

'TEST画面ハンドルと比較

If Wnd(CNT + 1) = hWnd Then
Debug.WriteLine("合致")
TEST_TRUE = True
End If

CNT = CNT + 1

Loop Until TEST_TRUE = True



解決済み
[ 親 91830 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -