From: Milan M <mil...@gm...> - 2010-01-22 02:29:51
|
Hello everyone, First and foremost, sorry if this is not the correct medium to ask the question -- it seems the most alive of all Win32::GuiTest forums I could find. My goal is simple: I have an application named "Foo Application" that has an icon somewhere in it, called "Bar Icon". I parsed the app-tree out in WinSpy, I have the control ID of the "Bar Icon". Here's my code snippet: <pre> #!/usr/bin/perl -w use strict; use warnings; use Data::Dumper; use Win32::GuiTest qw(:ALL); # Obtain handle on the main application window my $appTitle = "Foo Application"; my @appWindow = WaitWindow("^$appTitle" ); if( !@appWindow || (scalar (@appWindow) != 1)){ die "Cannot find a window with title/caption: $appTitle OR more than one window with that title opened!\n\n"; }else{ printf( "Window handle of $appTitle is %x\n\n", $appWindow[ 0 ] ); SetForegroundWindow($appWindow[0]); } # Now find the icon on the application # Click on "Bar Icon" (WinSpy says - Type: Edit. Hex: 96. Dec: 150) my $iconName = "Bar Icon"; print "Seeking $iconName ... "; my @iconNameWindow = FindWindowLike( $appWindow[0], undef, "Edit", 0x96); if( !@iconNameWindow ){ die "Cannot find $iconName edit box.\n\n"; }else{ print "FindWindowLike returned " . scalar(@iconNameWindow) . " handles.\n"; printf("Window handle of $iconName edit box is %x.\n", $iconNameWindow[0]); } # I have the handle to the icon. Click it. # ALL OF THESE FAIL # ----------------- #SetForegroundWindow($iconNameWindow[0]); # MouseClick ('^Bar Icon$'); # MouseClick ($iconNameWindow[0]); #my $errCode = MouseClick ('^Bar Icon$', undef, undef, 5, undef, 2); my $errCode = MouseClick ($iconNameWindow[0], undef, undef, 5, undef, 2); print "errCode = $errCode \n\n"; # This prints 0. </pre> Any help appreciated.... "Bar Icon" in WinSpy appears as class "Edit". I should point out that I obtain correct handle to the icon -- I know this because $iconNameWindow[0] outputs the same hex value that I see in WinSpy. I also printed out the value of that edit field in one of the previous attempts, and it returns as "Bar Icon". Again, much appreciated guys! - M |
From: Dmitry K. <dm...@ka...> - 2010-01-22 07:28:17
|
> # ALL OF THESE FAIL > # ----------------- > #SetForegroundWindow($iconNameWindow[0]); > # MouseClick ('^Bar Icon$'); > # MouseClick ($iconNameWindow[0]); > #my $errCode = MouseClick ('^Bar Icon$', undef, undef, 5, undef, 2); > my $errCode = MouseClick ($iconNameWindow[0], undef, undef, 5, undef, 2); > print "errCode = $errCode \n\n"; # This prints 0. Does the actual mouse pointer move? Look at implementation of MouseClick in GuiTest.pm, add a couple of debug statements there, or just call MouseMoveAbsPix and SendMouse directly. -- Sincerely, Dmitry Karasik |
From: Milan M <mil...@gm...> - 2010-01-22 15:47:50
|
Hi Dmitry, I see your point. I didn't move the mouse -- I assumed that, since I already obtain a handle on the icon, the mouse should be "centered" on it. Then, simply issuing a click should do it. Looks like I was wrong in that assumption. Going over the documentation, it appears that there is no function that does this, so I'll try your method. Cheers! - M On Fri, Jan 22, 2010 at 2:28 AM, Dmitry Karasik <dm...@ka...> wrote: >> # ALL OF THESE FAIL >> # ----------------- >> #SetForegroundWindow($iconNameWindow[0]); >> # MouseClick ('^Bar Icon$'); >> # MouseClick ($iconNameWindow[0]); >> #my $errCode = MouseClick ('^Bar Icon$', undef, undef, 5, undef, 2); >> my $errCode = MouseClick ($iconNameWindow[0], undef, undef, 5, undef, 2); >> print "errCode = $errCode \n\n"; # This prints 0. > > > Does the actual mouse pointer move? Look at implementation of > MouseClick in GuiTest.pm, add a couple of debug statements there, > or just call MouseMoveAbsPix and SendMouse directly. > > -- > Sincerely, > Dmitry Karasik > > |