NAME
Win32::ActAcc - `Active Accessibility' for task automation, GUI testing
SYNOPSIS
* Active Accessibility client API
use Win32::OLE;
use Win32::ActAcc;
Win32::OLE->Initialize();
$ao = AccessibleObjectFromPoint(320,240);
@children = $ao->AccessibleChildren();
$hwnd = $ao->WindowFromAccessibleObject();
$ao2 = AccessibleObjectFromWindow($hwnd);
* IAccessible
print $ao->get_accName() . "\n";
print $ao->get_accValue() . "\n";
print $ao->get_accDefaultAction() . "\n";
$statebits = $ao->get_accState();
$rolenum = $ao->get_accRole();
$ch1 = $ao->accNavigate(NAVDIR_FIRSTCHILD());
$p = $ao->get_accParent();
* WinEvents
$aoNotepad = Win32::ActAcc::waitForEvent(
+{ 'event'=>EVENT_OBJECT_SHOW(),
'name'=>qr/Notepad/,
'role'=>ROLE_SYSTEM_WINDOW()});
* Iterators
Win32::ActAcc's iterators can drill into menus and outlines, in
addition to the Active Accessibility object hierarchy.
# display children of $ao
my $iter = $ao->iterator();
$iter->open();
my $aoi;
while ($aoi = $iter->nextAO())
{
print $aoi->describe() . "\n";
}
$iter->close();
* Finding accessible objects
# find any descendant
$notepadTextArea = $aoNotepad->drill("{editable text}", +{'max'=>1, 'min'=>1});
# find immediate child
$AimConversation = $aoIM->dig( +[ +{'role'=>ROLE_SYSTEM_WINDOW(), 'name'=>qr/\<HTML\>/ } ] );
# follow path
$tray = Win32::ActAcc::Desktop()->dig([
+{'role'=>Win32::ActAcc::ROLE_SYSTEM_WINDOW(), 'name'=>'', 'state'=>+{'mask'=>Win32::ActAcc::STATE_SYSTEM_INVISIBLE(), 'value'=>0}},
+{'role'=>Win32::ActAcc::ROLE_SYSTEM_WINDOW(), 'name'=>'', 'state'=>+{'mask'=>Win32::ActAcc::STATE_SYSTEM_INVISIBLE(), 'value'=>0}},
+{'role'=>Win32::ActAcc::ROLE_SYSTEM_WINDOW(), 'name'=>'', 'state'=>+{'mask'=>Win32::ActAcc::STATE_SYSTEM_INVISIBLE(), 'value'=>0}},
+{'role'=>Win32::ActAcc::ROLE_SYSTEM_WINDOW(), 'name'=>'Tray', 'state'=>+{'mask'=>Win32::ActAcc::STATE_SYSTEM_INVISIBLE(), 'value'=>0}},
+{'role'=>Win32::ActAcc::ROLE_SYSTEM_PAGETABLIST(), 'state'=>+{'mask'=>Win32::ActAcc::STATE_SYSTEM_INVISIBLE(), 'value'=>0}} ],
+{'max'=>1,'min'=>1} );
* Task-automation conveniences
use Win32::OLE;
use Win32::ActAcc;
use Win32::ActAcc::Shell2000;
#
Win32::OLE->Initialize();
$menu = Win32::ActAcc::Shell2000::StartButtonMenu();
Win32::ActAcc::clearEvents();
$menu->menuPick([ qr/^Programs/, qr/Accessories/i, qr/Notepad/i ]);
$aoNotepad = Win32::ActAcc::waitForEvent(
+{ 'event'=>EVENT_OBJECT_SHOW(),
'name'=>qr/Notepad/,
'role'=>ROLE_SYSTEM_WINDOW()});
$aoNotepad->menuPick(+["File", "Exit"]);
* Tools and samples
* aaDigger.pl shows how to traverse the tree of accessible objects.
* aaEvents.pl shows you the WinEvents that reflect what you're doing
with the GUI.
* aaWhereAmI.pl shows how to link a pixel location with its
accessible object.
* elizaNotepad.pl, just for fun, uses Notepad as the user interface
to Chatbot::Eliza.
See under the section on "Tools" for more about aaDigger, aaEvents,
and aaWhereAmI.
You'll want to additionally use Win32::GuiTest, and other Win32 modules,
if you want your script to click, type, manipulate the clipboard, etc.
For full documentation, refer to ActAcc.html inside the zip. You will also
find many useful samples in the '.t' (test-case) files.
INSTALLATION
You can install Win32::ActAcc by compiling it from source code, or, if you
have ActivePerl, you can install it using PPM, in which case you don't
need a C++ compiler.
Installation from source code
perl makefile.pl
nmake
nmake install
nmake test
Yes, you have to install it before you test it. Otherwise it can't find
its DLL. Probably someone will figure out how to fix this.
The test is tenuous. It will probably work only with Windows 2000, since
the design and operation of Notepad changes subtly from version to
version. You must have Win32::GuiTest 0.6 or later.
Prerequisites:
* You may need Visual C++ 6.0 SP 4. The C/C++ part of Win32::ActAcc
might not be portable to other compilers.
* You need the July 2000 "Platform SDK". Earlier versions of the Active
Accessibility SDK could give problems compiling.
* The test suite requires Notepad.exe and Explorer.exe on the path.
Also, it requires Win32::GuiTest.
* The Eliza-AOLInstantMessenger sample requires up-to-date HTML parsing
modules. It will tell you if yours are missing or out-of-date.
Installation for ActivePerl users (PPM)
ActivePerl users can install Win32::ActAcc using PPM.
1 Unzip the zip (Win32-ActAcc-n.n.zip). Make sure your unzip program
preserved the directory tree: for example, you should see
Win32-ActAcc.tar.gz in an "x86" subdirectory under the directory that
contains ActAcc.html (the documentation).
2 Open a command prompt window.
3 In the command prompt, "cd" to the directory that contains
ActAcc.html.
4 In the command prompt, issue the following command.
ppm install --location=. Win32-ActAcc
To check the installation, you may try aaDigger.pl. The test suite (nmake
test) doesn't seem to work if you do the ppm installation.
Files Installed
* In bin: aaDigger.bat and aaDigger.pl, aaEvents.bat and aaEvents.pl,
aaWhereAmI.bat and aaWhereAmI.pl
* In site\lib\Win32: aaDigger.pl, aaEvents.pl, aaWhereAmI.pl, ActAcc.pm,
ActAcc.pod
In site\lib\Win32\ActAcc: aaExplorer.pm
* In site\lib\auto\Win32\ActAcc: ActAcc.dll, ActAccEM.dll
COPYRIGHT
Copyright 2001, Phill Wolf. All rights reserved, including, without
limitation, motion-picture rights.
You may use Win32::ActAcc under the terms of the Artistic License, as
specified in the README file of the Perl distribution.
AUTHOR
Phill Wolf,
[email protected]