Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re^3: Win32::GuiTest control id

by dasgar (Priest)
on Jan 28, 2013 at 05:25 UTC ( #1015632=note: print w/replies, xml ) Need Help??

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.

Replies are listed 'Best First'.
Re^4: Win32::GuiTest control id
by abt (Novice) on Jan 28, 2013 at 07:55 UTC
    I can not fully control the program using a keyboard and more over, the program is part of a family of programs that are subject to change. The basic structure is there, but buttons and menu is subject to change. Problem is that the control-id's are provided, but doesnt seem to work.

      Stop guessing what these things are, don't assume the list you have been given by someone is correct, use the tools provided with Win32::GuiTest to discover what the control IDs actually are. If they're subject to change, you'll need to keep your automation code up to date with any changes to this.

        That is exactly what I am trying to do. But even Button ID's that are returned do not seem to be clickable. Even getting third party class refs. Problem seems to be related to embeded objects. Those seem to be untouchable. Will browse the monks archive for related issues and solutions. Tnx for all the help.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1015632]
and the fire pops...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (6)
As of 2018-06-24 04:04 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (126 votes). Check out past polls.