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

わんくま同盟

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

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


■88850 / )  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

返信 編集キー/


管理者用

- Child Tree -