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

わんくま同盟

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

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

ツリー一括表示

VB.NETでの全ハンドル列挙について /ぽん (18/10/04(Thu) 12:40) #88842
Re[1]: VB.NETでの全ハンドル列挙について /せば (18/10/04(Thu) 13:33) #88843
│├ Re[2]: VB.NETでの全ハンドル列挙について /??? (18/10/04(Thu) 14:40) #88845
│└ Re[2]: VB.NETでの全ハンドル列挙について /??? (18/10/04(Thu) 16:22) #88852 解決済み
│  ├ Re[3]: VB.NETでの全ハンドル列挙について /??? (18/10/04(Thu) 16:36) #88853
│  │└ Re[4]: VB.NETでの全ハンドル列挙について /魔界の仮面弁士 (18/10/04(Thu) 17:39) #88856
│  └ Re[3]: VB.NETでの全ハンドル列挙について /ポリスメン (18/10/04(Thu) 17:54) #88857
Re[1]: VB.NETでの全ハンドル列挙について /魔界の仮面弁士 (18/10/04(Thu) 14:19) #88844
  └ Re[2]: VB.NETでの全ハンドル列挙について /??? (18/10/04(Thu) 14:44) #88846
    └ Re[3]: VB.NETでの全ハンドル列挙について /??? (18/10/04(Thu) 16:04) #88850
      └ Re[4]: VB.NETでの全ハンドル列挙について /??? (18/10/04(Thu) 16:16) #88851 解決済み
        └ Re[5]: VB.NETでの全ハンドル列挙について /ポリスメン (18/10/04(Thu) 18:03) #88858
          └ Re[6]: VB.NETでの全ハンドル列挙について /??? (18/10/05(Fri) 12:38) #88865


親記事 / ▼[ 88843 ] ▼[ 88844 ]
■88842 / 親階層)  VB.NETでの全ハンドル列挙について
□投稿者/ ぽん (1回)-(2018/10/04(Thu) 12:40:59)

分類:[.NET 全般] 

VB.NETでのハンドル取得についてご質問させていただきます。

http://nonsoft.la.coocan.jp/SoftSample/VB.NET/SampleEnumWindows.html

上記URLに、VB.NETでTreeViewに実行中のすべてのコントロールを表示するコードが載せられているのですが
ハンドルの取得ができずに困っております。
(同じページにVB6のコードがあるのですが、こちらはExcelVBAに貼り付けたところ、
左側にハンドルが表示されました)

やりたいことは、現在実行中の全ハンドル(親と子)のみをTreeViewに列挙することです。
どういったコードにしたらよいか、ご教示いただけると幸いです。

何卒、宜しくお願い致します。
[ □ Tree ] 返信 編集キー/

▲[ 88842 ] / ▼[ 88845 ] ▼[ 88852 ]
■88843 / 1階層)  Re[1]: VB.NETでの全ハンドル列挙について
□投稿者/ せば (8回)-(2018/10/04(Thu) 13:33:09)
この質問見たことあるわー
https://teratail.com/questions/135393
https://teratail.com/questions/149647
https://teratail.com/questions/149650

恐らく同一人物ですよね?

[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88843 ] / 返信無し
■88845 / 2階層)  Re[2]: VB.NETでの全ハンドル列挙について
□投稿者/ ??? (1回)-(2018/10/04(Thu) 14:40:57)
No88843 (せば さん) に返信
> この質問見たことあるわー
> https://teratail.com/questions/135393
> https://teratail.com/questions/149647
> https://teratail.com/questions/149650
>
> 恐らく同一人物ですよね?
>

違いますが。
もしもそうだったとして、
一体、何を言いたいのでしょうか?

「特定した俺すごいだろ?」でしょうか?
お疲れ様です。

そもそも回答になっていないのでは?
[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88843 ] / ▼[ 88853 ] ▼[ 88857 ]
■88852 / 2階層)  Re[2]: VB.NETでの全ハンドル列挙について
□投稿者/ ??? (6回)-(2018/10/04(Thu) 16:22:27)
No88843 (せば さん) に返信

確かに非常に似ているね。
出てくるボキャブラリーとか。
そもそも本当の人違いの否定の仕方ではないよね。
解決済み
[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88852 ] / ▼[ 88856 ]
■88853 / 3階層)  Re[3]: VB.NETでの全ハンドル列挙について
□投稿者/ ??? (7回)-(2018/10/04(Thu) 16:36:58)
No88852 (??? さん) に返信
> ■No88843 (せば さん) に返信
>
> 確かに非常に似ているね。
> 出てくるボキャブラリーとか。
> そもそも本当の人違いの否定の仕方ではないよね。

暇なんですね。
[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88853 ] / 返信無し
■88856 / 4階層)  Re[4]: VB.NETでの全ハンドル列挙について
□投稿者/ 魔界の仮面弁士 (1873回)-(2018/10/04(Thu) 17:39:32)
2018/10/04(Thu) 17:46:16 編集(投稿者)

No88853 (??? さん) に返信
> 暇なんですね。

他掲示板の話はさておき、
ここでのぽんさんの投稿は、どれとどれでしょう?

FireFox をお使いなのかもしれませんが、Cookie が化けているなら
訂正してから投稿していただかないと、投稿者を区別できないので、
次回以降ご注意ください。

http://bbs.wankuma.com/index.cgi?mode=man
>> 一貫して同じハンドルを使用し、場を混乱させないようにしましょう。


それと、無駄に全文引用されると読みにくいので、
引用の仕方も見直してもらえると助かります。


No88850 (??? さん) に返信
> 以下、実現できたコードを載せておきます。
colChilds.Item(j) 表記と colChilds(j) 表記が混在していますね。

children ではなく childs なのは、とりあえず目をつぶるとしても、
元々参考にされていたコードは、.NET 1.x 頃のソースのようです。
恐らくは VB6 版からの直訳っぽい実装で、On Error Resume Next が使われていたり、
P/Invoke のマーシャリングが回りくどくなっていたりと、
あまりに .NET らしからぬコードになっていますので、GetAllWindows の
各行の意図を読み取った上で、改めて書き直した方が良いですよ。

エンコーディングの処理も、Form1 で実装すべき内容ではなく、
本来は GetAllWindows 自身で処理されているべきですよね。
[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88852 ] / 返信無し
■88857 / 3階層)  Re[3]: VB.NETでの全ハンドル列挙について
□投稿者/ ポリスメン (1回)-(2018/10/04(Thu) 17:54:36)
No88852 (??? さん) に返信
> ■No88843 (せば さん) に返信
>
> 確かに非常に似ているね。
> 出てくるボキャブラリーとか。
> そもそも本当の人違いの否定の仕方ではないよね。

君の文体は大阪の逃走犯そっくりだわ
否定できる?
[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88842 ] / ▼[ 88846 ]
■88844 / 1階層)  Re[1]: VB.NETでの全ハンドル列挙について
□投稿者/ 魔界の仮面弁士 (1872回)-(2018/10/04(Thu) 14:19:01)
No88842 (ぽん さん) に返信
> 上記URLに、VB.NETでTreeViewに実行中のすべてのコントロールを表示するコードが載せられているのですが
VB6 互換 Collection を使っていたり、IntPtr を使わずに
x86 かつ Option Strict Off 前提のコードになっていたり、
Wide API ではなく ANSI API になっていて、しかも
文字列をバイナリで処理していたりするなど、
突っ込みどころが満載なので、ゴッソリ書き直したい…。


> ハンドルの取得ができずに困っております。
取得はされてますよ。colChilds(j)(0) を表示していないだけ。

VB.NET 版のコードは、
 Dim strClass As String は colChilds(j)(1) から取得
 Dim strTitle As String は colChilds(j)(2) から取得
となっていて、それを
 New TreeNode(strClass & " - " & strTitle)
で表示していますよね。


なので、
 Dim strHandle As String = CInt(colChilds(j)(0)).ToString("X8")
などを追加して、
 New TreeNode(strHandle & " - " & strClass & " - " & strTitle)
にでも変えてやれば良いんじゃないでしょうか。VB6 版のように。
[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88844 ] / ▼[ 88850 ]
■88846 / 2階層)  Re[2]: VB.NETでの全ハンドル列挙について
□投稿者/ ??? (2回)-(2018/10/04(Thu) 14:44:18)
No88844 (魔界の仮面弁士 さん) に返信
> ■No88842 (ぽん さん) に返信
>>上記URLに、VB.NETでTreeViewに実行中のすべてのコントロールを表示するコードが載せられているのですが
> VB6 互換 Collection を使っていたり、IntPtr を使わずに
> x86 かつ Option Strict Off 前提のコードになっていたり、
> Wide API ではなく ANSI API になっていて、しかも
> 文字列をバイナリで処理していたりするなど、
> 突っ込みどころが満載なので、ゴッソリ書き直したい…。
>
>
>>ハンドルの取得ができずに困っております。
> 取得はされてますよ。colChilds(j)(0) を表示していないだけ。
>
> VB.NET 版のコードは、
>  Dim strClass As String は colChilds(j)(1) から取得
>  Dim strTitle As String は colChilds(j)(2) から取得
> となっていて、それを
>  New TreeNode(strClass & " - " & strTitle)
> で表示していますよね。
>
>
> なので、
>  Dim strHandle As String = CInt(colChilds(j)(0)).ToString("X8")
> などを追加して、
>  New TreeNode(strHandle & " - " & strClass & " - " & strTitle)
> にでも変えてやれば良いんじゃないでしょうか。VB6 版のように。

素晴らしいご回答ありがとうございます!
まだまだ勉強不足のため、分からない部分が多々ありますが、
戴いた情報を参考にコーディングしてみようと思います。
結果はまたご報告いたします。
[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88846 ] / ▼[ 88851 ]
■88850 / 3階層)  Re[3]: VB.NETでの全ハンドル列挙について
□投稿者/ ??? (4回)-(2018/10/04(Thu) 16:04:16)
No88846 (??? さん) に返信
> ■No88844 (魔界の仮面弁士 さん) に返信
>>■No88842 (ぽん さん) に返信
> >>上記URLに、VB.NETでTreeViewに実行中のすべてのコントロールを表示するコードが載せられているのですが
>>VB6 互換 Collection を使っていたり、IntPtr を使わずに
>>x86 かつ Option Strict Off 前提のコードになっていたり、
>>Wide API ではなく ANSI API になっていて、しかも
>>文字列をバイナリで処理していたりするなど、
>>突っ込みどころが満載なので、ゴッソリ書き直したい…。
>>
>>
> >>ハンドルの取得ができずに困っております。
>>取得はされてますよ。colChilds(j)(0) を表示していないだけ。
>>
>>VB.NET 版のコードは、
>> Dim strClass As String は colChilds(j)(1) から取得
>> Dim strTitle As String は colChilds(j)(2) から取得
>>となっていて、それを
>> New TreeNode(strClass & " - " & strTitle)
>>で表示していますよね。
>>
>>
>>なので、
>> Dim strHandle As String = CInt(colChilds(j)(0)).ToString("X8")
>>などを追加して、
>> New TreeNode(strHandle & " - " & strClass & " - " & strTitle)
>>にでも変えてやれば良いんじゃないでしょうか。VB6 版のように。
>
> 素晴らしいご回答ありがとうございます!
> まだまだ勉強不足のため、分からない部分が多々ありますが、
> 戴いた情報を参考にコーディングしてみようと思います。
> 結果はまたご報告いたします。


おかげさまで無事に表示させることが出来ました!
.ToString("X8")でわざわざ16進数へ置換する処理まで入れていただき、大変感謝いたします。
またご質問することがあると思いますので、その際は何卒、宜しくお願い致します!

以下、実現できたコードを載せておきます。
「現在実行中のハンドルのみを列挙」

bytClass = System.Text.Encoding.GetEncoding(
"SHIFT-JIS").GetBytes(colChilds.Item(j)(0))
If bytClass.Length < 30 Then
Dim p As Integer = bytClass.Length
ReDim Preserve bytClass(bytClass.Length + bytSpace.Length - 1)
Array.Copy(bytSpace, 0, bytClass, p, bytSpace.Length)
ReDim Preserve bytClass(30 - 1)
End If
Dim strHandle As String = CInt(colChilds(j)(0)).ToString("X8")

If j = 1 Then
treeNodeTop = New TreeNode(strHandle)
TreeView1.Nodes.Add(treeNodeTop)
Else
Dim treeNodeSub As TreeNode =
New TreeNode(strHandle)
treeNodeTop.Nodes.Add(treeNodeSub)
End If

[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88850 ] / ▼[ 88858 ]
■88851 / 4階層)  Re[4]: VB.NETでの全ハンドル列挙について
□投稿者/ ??? (5回)-(2018/10/04(Thu) 16:16:06)
No88850 (??? さん) に返信
> ■No88846 (??? さん) に返信
>>■No88844 (魔界の仮面弁士 さん) に返信
> >>■No88842 (ぽん さん) に返信
>>>>上記URLに、VB.NETでTreeViewに実行中のすべてのコントロールを表示するコードが載せられているのですが
> >>VB6 互換 Collection を使っていたり、IntPtr を使わずに
> >>x86 かつ Option Strict Off 前提のコードになっていたり、
> >>Wide API ではなく ANSI API になっていて、しかも
> >>文字列をバイナリで処理していたりするなど、
> >>突っ込みどころが満載なので、ゴッソリ書き直したい…。
> >>
> >>
>>>>ハンドルの取得ができずに困っております。
> >>取得はされてますよ。colChilds(j)(0) を表示していないだけ。
> >>
> >>VB.NET 版のコードは、
> >> Dim strClass As String は colChilds(j)(1) から取得
> >> Dim strTitle As String は colChilds(j)(2) から取得
> >>となっていて、それを
> >> New TreeNode(strClass & " - " & strTitle)
> >>で表示していますよね。
> >>
> >>
> >>なので、
> >> Dim strHandle As String = CInt(colChilds(j)(0)).ToString("X8")
> >>などを追加して、
> >> New TreeNode(strHandle & " - " & strClass & " - " & strTitle)
> >>にでも変えてやれば良いんじゃないでしょうか。VB6 版のように。
>>
>>素晴らしいご回答ありがとうございます!
>>まだまだ勉強不足のため、分からない部分が多々ありますが、
>>戴いた情報を参考にコーディングしてみようと思います。
>>結果はまたご報告いたします。
>
>
> おかげさまで無事に表示させることが出来ました!
> .ToString("X8")でわざわざ16進数へ置換する処理まで入れていただき、大変感謝いたします。
> またご質問することがあると思いますので、その際は何卒、宜しくお願い致します!
>
> 以下、実現できたコードを載せておきます。
> 「現在実行中のハンドルのみを列挙」
>
> bytClass = System.Text.Encoding.GetEncoding(
> "SHIFT-JIS").GetBytes(colChilds.Item(j)(0))
> If bytClass.Length < 30 Then
> Dim p As Integer = bytClass.Length
> ReDim Preserve bytClass(bytClass.Length + bytSpace.Length - 1)
> Array.Copy(bytSpace, 0, bytClass, p, bytSpace.Length)
> ReDim Preserve bytClass(30 - 1)
> End If
> Dim strHandle As String = CInt(colChilds(j)(0)).ToString("X8")
>
> If j = 1 Then
> treeNodeTop = New TreeNode(strHandle)
> TreeView1.Nodes.Add(treeNodeTop)
> Else
> Dim treeNodeSub As TreeNode =
> New TreeNode(strHandle)
> treeNodeTop.Nodes.Add(treeNodeSub)
> End If
>

解決済みとさせていただきます!
ありがとうございました!
解決済み
[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88851 ] / ▼[ 88865 ]
■88858 / 5階層)  Re[5]: VB.NETでの全ハンドル列挙について
□投稿者/ ポリスメン (2回)-(2018/10/04(Thu) 18:03:12)
無闇やたらに他人を疑ったところで得られるものなんて何もない
議論は本題から逸れるばかり
仲良くやりなさい
[ 親 88842 / □ Tree ] 返信 編集キー/

▲[ 88858 ] / 返信無し
■88865 / 6階層)  Re[6]: VB.NETでの全ハンドル列挙について
□投稿者/ ??? (8回)-(2018/10/05(Fri) 12:38:47)
ここで書き込みしている人ですね。
http://mevius.5ch.net/test/read.cgi/tech/1533088611/
[ 親 88842 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -