I am still having a difficult time getting this to work. Here is what I have so far. Can anyone help me out?
###############
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);}
}
|