in reply to Re^5: Enumerate a Win32 Treeview
in thread Enumerate a Win32 Treeview
############### sub getListviewItems{ my $hwnd = shift || return "No treeview handle"; #if no result send a WM_GetText message to the window $WmSendMessage ||= new Win32::API("user32", "SendMessageA", [N, N, + N, P],'N') || return "SendMessageA Error"; my $TVGN_ROOT =0; my $TVGN_NEXT =1; my $TVGN_PREVIOUS =2; my $TVGN_PARENT =3; my $TVGN_CHILD =4; my $TVGN_FIRSTVISIBLE =5; my $TVGN_NEXTVISIBLE =6; my $TVGN_PREVIOUSVISIBLE =7; my $TVGN_DROPHILITE =8; my $TVGN_CARET =9; my $TVGN_LASTVISIBLE =10; my $TV_FIRST=4352; my $TVM_GETNEXTITEM=$TV_FIRST+10; # 1. You pass TVGN_ROOT/null, to get a handle to the root item in +the display. my $roothandle = $WmSendMessage->Call($hwnd,$TVM_GETNEXTITEM, $TVG +N_ROOT, 0); print "Root Handle: $roothandle\n"; # 2. Then you pass TVGN_CHILD/roothandle (from above) to get the h +andle to the first child. my $firstchildhwnd = $WmSendMessage->Call($hwnd,$TVM_GETNEXTITEM, +$TVGN_CHILD, $roothandle); print "firstchildhwnd: $firstchildhwnd\n"; # 3. # 1. Then you use TVGN_NEXT/firstChildHandle (from above) to +iterate the first level children. # 2. And TGVN_CHILD/firstChildHandle to process the grandchil +dren... while(my $tvwnd=$WmSendMessage->Call($hwnd,$TVM_GETNEXTITEM, $TVGN +_NEXT, $roothandle)){ my $text=getWindowText($tvwnd); print "Child Handle: $tvwnd, Text: $text\n"; } return 1; } ############### sub getWindowText{ my $hwnd = shift || return; $GetWindowText ||= new Win32::API("user32", "GetWindowText", ['N', + 'P', 'N'], 'N') || return; my $title = " " x 1024; my $titleLen = 1024; my $result = $GetWindowText->Call($hwnd, $title, $titleLen); if($result){return substr($title, 0, $result);} #if no result send a WM_GetText message to the window $WmSendMessage ||= new Win32::API("user32", "SendMessageA", [N, N, + N, P],'N') || return; my $WM_GETTEXT=13; my $text = " " x 2048; my $textLen = 2048; my $result = $WmSendMessage->Call($hwnd,$WM_GETTEXT, $textLen, $te +xt); if($result){return substr($text, 0, $result);} }
|
|---|