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


in reply to Win32::GuiTest control id

You've got a few options to choose from. First, there's Spy++ utility from Microsoft that is part of their Visual Studio package. From some blog posts that I found, it looks like the Express versions of Visual Studio do not have the Spy++ utility.

If you don't want to purchase Visual Studio, you've got a few free alternatives. In the examples from Win32::GuiTest, there are spy-- and spy. Since I personally haven't tried either, I can't tell you much about either example scripts.

There's a freeware utility called WinSpy++ that is "based around the Spy++ utility that ships with Microsoft Visual Studio". Again, I haven't used it so I can't provide any more details on it. Recently, someone had posted a question here in the monastery looking for a newer version of WinSpy++ that would work with Windows 7.

Another alternative is to check out AutoIt, which is a freeware tool set that can be used to automate GUI based applications like you can with Win32::GuiTest. One of the tools that they provide is the AutoIt Window Info tool, which can help provide information about the GUI application that you're wanting to automate. In fact, I used this same tool to help find window IDs to modify the calc.pl example from Win32::GuiTest. You can look at my modified code at Re: Problems with WIN32::GUITEST.

Replies are listed 'Best First'.
Re^2: Win32::GuiTest control id
by abt (Novice) on Jan 27, 2013 at 17:25 UTC
    I am not supposed to use any of these Tools. But to make things better i have a list of Controlids. It's just the clicking and pushbutton that do not respond. Well some collegae told me that the list he gave me where the control id's. And if I have to use a tool to read the ID's, I am far from flexible. I coe across similar programs that can differ sligthly and new versions where the devolpers have the freedom to change the ID's That will make my task impossible for that means for every verion of every similar ( not exatly the same) program a offline check.

      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.

      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.

        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.

      I am not supposed to use any of these Tools.

      Sure you are

      And if I have to use a tool to read the ID's, I am far from flexible.

      Funny -- because you know what the alternative is? Not doing the job at all