http://www.perlmonks.org?node_id=1015632


in reply to Re^2: Win32::GuiTest control id
in thread Win32::GuiTest control id

It kind of sounds like you're trying to automate something for use at your work. If your employer has given you the task to do this automation work, then I personally believe that they need to provide you with what you need. In this case, that would be the use of a utility like the ones I suggested or you need access to key information from the source code. Of course, I've never been employed as a programmer before, so I guess there's a chance that I might be wrong about that.

Given the restraints that you're claiming that you have to work within, here's my thoughts on what to try.

First, you can check out the spy-- and spy examples from the Win32::GuiTest module. If you have Perl installed along with Win32::GuiTest, you already have those "installed". Just run them and see if those can help you out.

Secondly, you can try to use Win32::GuiTest module to come up with some code of your own to explore the window GUI object of the application that you're trying to automate. To help you get started, you can start with something like the code below. Of course, you will need to make some modifications to use your desired program instead of calc.exe. Also, you may need to dig deeper into the windows structure, but this should help get you started.

use strict; use warnings; use Win32::GuiTest qw(:ALL); system "start calc.exe"; sleep(1); my @windows = FindWindowLike(undef, "Calculator"); my @children = GetChildWindows($windows[0]); SetFocus($windows[0]); foreach my $child (@children) { my $id = GetWindowID($child); my $class = GetClassName($child); print "child: $id -- $class\n"; } SendKeys("%{F4}"); # Alt-F4 to exit

Out of curiosity, when you manually use the program that you're trying to automate, can you fully run that program using only the keyboard? If so, I would suggest punting on using PushButton and MouseClick functions. Instead, just go with the SendKeys function, which is providing "keyboard" input to the GUI based application.