[jawsscripts] Re: Searching menu structures for a particular menu item

  • From: Victor Tsaran <vtsaran@xxxxxxxxx>
  • To: jawsscripts@xxxxxxxxxxxxx
  • Date: Tue, 30 Dec 2008 17:14:37 -0800

Thanks Jamal,
I will definitely give your tools a whirl.
Best,
Victor

On 12/30/2008 10:02 AM, Jamal Mazrui wrote:
> Hey Vic,
> It's possible to do that via the Windows API but not native JAWS
> scripting functions, as far as I know.  WinDig is open source
> http://EmpowermentZone.com/wdsetup.exe
>
> so feel free to look at the source code in WinDig.wbt (the WinBatch
> language).
>
> I also wrote a utility dedicated to enumerating menu items which is
> included in HomerKit
> http://EmpowermentZone.com/kitsetup.zip
>
> MenuList.bas is in PowerBASIC.  The small executable, MenuList.exe,
> creates a text file that lists all menu items, including their current
> state (which addresses another question someone had about whether a menu
> item is disabled).  Look at the UIAlterNateMenu script in Editor.jss for
> an example of how the output is parsed.
>
> Jamal
> On Wed, 24 Dec 2008, Victor Tsaran
> wrote:
>
>> Date: Wed, 24 Dec 2008 12:10:48 -0800
>> From: Victor Tsaran<vtsaran@xxxxxxxxx>
>> Reply-To: jawsscripts@xxxxxxxxxxxxx
>> To: jawsscripts@xxxxxxxxxxxxx
>> Subject: [jawsscripts] Re: Searching menu structures for a particular
>>      menu item
>>
>> Hey Jamal,
>> A quick question for you: is there a way to retrieve text string
>> associated with a menu ID without actually activating the menu item
>> itself? I am not able to figure that one out and not sure if the method
>> even exists..
>> Thx,
>> Vic
>>
>> Jamal Mazrui wrote:
>>> I found a message I previously wrote explaining the SendMessage (or
>>> PostMessage) technique for invoking a menu item.  Once again, WinDig is
>>> available at
>>> http://EmpowermentZone.com/wdsetup.exe
>>>
>>> You can get almost any of my programs from the Open Source Projects page
>>> of
>>> http://NonvisualDevelopment.org
>>>
>>> Jamal
>>>
>>> From: Jawsscripts-bounces@xxxxxxxxxxxxxxxxxxxx on behalf of Jamal Mazrui
>>> [empower@xxxxxxxxx]
>>> Sent: Friday, September 23, 2005 6:36 AM
>>> To: jawsscripts@xxxxxxxxxxxxxxxxxxxx
>>> Subject: Using WinDig output to invoke menu choices via SendMessage
>>>
>>> In the "Menus" section of WinDig output, the last piece of data on the
>>> line for a menu item is its menu ID--if one exists.  If a menu item does
>>> not have a hot key but does have a menu ID, you can create a hot key via a
>>> JAWS script and the SendMessage function.  For example, the following line
>>> of WinDig output is about the Paste Special menu item of WordPad:
>>>
>>> 2.5 Paste Special...        S       57639
>>>
>>> The 2.5 number is the outline number of the menu hierarchy, indicating
>>> that the menu item is the fifth one down the second menu, the Edit menu.
>>> The ... ellipses indicate that the menu item presents a dialog.  S is the
>>> access letter, indicating that you can press it when the Edit menu is
>>> dropped down to invoke this menu item.  Finally, the 57639 number is the
>>> menu ID, similar to a control ID.
>>>
>>> This review of the WinDig output for WordPad showed no accelerator key for
>>> PasteSpecial but a menu ID was available.  I am not suggesting that
>>> scripts are needed for every menu item without a hot key--this is just to
>>> illustrate the technique, and you would judge whether such a script adds
>>> significant value in the context of the application.
>>>
>>> Although it is also possible to invoke a menu item by sending keystrokes
>>> to the application, that technique is less reliable because it is affected
>>> by the current keyboard focus.  It also tends to produce extra speech
>>> which you may then need to silence with SpeechOff and Delay functions.
>>>
>>> The SendMessage approach, on the other hand, does not actually activate
>>> and navigate the menus of the application's user interface.  It uses a
>>> Windows message constant, WM_COMMAND, which is passed with a menu ID to
>>> the application window associated with the menu of interest.  The relevant
>>> window handle is usually the one returned by GetAppMainWindow, but the
>>> InvokeMenuItem wrapper function below does not assume this in case you
>>> wish to use another window, including a window of an application other
>>> than the one with focus.
>>>
>>>    The code below consists of a generic function called InvokeMenuItem, and
>>> a sample script called PasteSpecial, which might be attached to
>>> Control+Shift+V. Note that a limitation of this approach is that it only
>>> works if the application implements standard menus of the Win32 API.
>>> Unfortunately, many applications do not, such as those in the Microsoft
>>> Office suite.
>>>
>>> Jamal
>>>
>>>
>>> Int Function InvokeMenuItem(Handle h, Int i)
>>> Var
>>> Int WM_COMMAND
>>>
>>> Let WM_COMMAND = 273
>>> Return SendMessage(h, WM_COMMAND, i, 0)
>>> EndFunction
>>>
>>> Script PasteSpecial()
>>> Var
>>> Handle h,
>>> Int i
>>>
>>> Let h = GetAppMainWindow(GetFocus())
>>> Let i = 57639 ; menu ID of Paste Special in WordPad
>>>
>>> InvokeMenuItem(h, i)
>>> EndScript
>>>
>>>
>>> _____________________________________________________________
>>>
>>> To leave this list, send a blank message to
>>> jawsscripts-unsubscribe@xxxxxxxxxxxxxxxxxxxxx
>>> Information about all of our lists:
>>> http://blindprogramming.com/mailman/listinfo
>>> Other blindness lists:
>>> http://www.visionrx.com/library/resources/resource_int1.asp
>>> Web site address: http://www.BlindProgramming.com
>>>
>>>
>>> _______________________________________________
>>> Jawsscripts mailing list
>>> Jawsscripts@xxxxxxxxxxxxxxxxxxxx
>>> http://blindprogramming.com/mailman/listinfo/jawsscripts_blindprogramming.com
>>>
>>> __________
>>> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>>>
>>> View the list's information and change your settings at
>>> http://www.freelists.org/list/jawsscripts
>>>
>>>
>> __________
>> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>>
>> View the list's information and change your settings at
>> http://www.freelists.org/list/jawsscripts
>>
> __________
> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>
> View the list's information and change your settings at
> http://www.freelists.org/list/jawsscripts
>
>

__________ 
Visit and contribute to The JAWS Script Repository http://jawsscripts.com

View the list's information and change your settings at 
http://www.freelists.org/list/jawsscripts

Other related posts: