Jump to content
nacerbaaziz

need help to create a tool for the blind users

Recommended Posts

hello sirs, i've created a tool to the blind users, this tool helps the blind to listen to a audio effect when moving between the GUIs controls on they computers
where this tool can get the class for the current focus control and play a sound from a folder
i've added all the knowne classes, but i found some problems i hope any one can help me.

this is the code that i created

#include <WinAPISys.au3>
Global $h_CurrentHWNDFocus = "", $h_CurrentControlHWNDFocus = ""
AdlibRegister("WindowAudioFocus", 50)
Func WindowAudioFocus()
    Local $h_NewHWNDFocus = WinGetHandle("[active]", "")
    Local $h_NewControlHWNDFocus = ControlGetFocus($h_NewHWNDFocus, "")
    If ($h_NewHWNDFocus = $h_CurrentHWNDFocus) And ($h_NewControlHWNDFocus = $h_CurrentControlHWNDFocus) Then Return 0
    AdlibUnRegister("WindowAudioFocus")
    If Not ($h_NewHWNDFocus = $h_CurrentHWNDFocus) Then
        SoundPlay(@ScriptDir & "\focus_Audio\WindowChanged.wav")
    Else
        Switch _WinAPI_GetClassName(ControlGetHandle($h_NewHWNDFocus, "", $h_NewControlHWNDFocus))
            Case "Button", "Start", "TrayButton", "TrayShowDesktopButtonWClass", "sbutton", "CirrussButton", "ODbcButton", "ThunderRTCommandButton", "ThunderSSOption", "ThunderSSCommand", "ThunderCommandButton", "ThunderRT6CommandButton", "ThunderRT5CommandButton", "TButton", "TBitBtn", "TAdvGlowButton", "ButtonWndClass", "afx:0:376:baa946", "_AOL_Button"
                If _IsCheckBox(ControlGetHandle($h_NewHWNDFocus, "", $h_NewControlHWNDFocus)) Then
                    SoundPlay(@ScriptDir & "\focus_Audio\checkBox.wav")
                ElseIf _IsRadio(ControlGetHandle($h_NewHWNDFocus, "", $h_NewControlHWNDFocus)) Then
                    SoundPlay(@ScriptDir & "\focus_Audio\radio.wav")
                Else
                    SoundPlay(@ScriptDir & "\focus_Audio\button.wav")
                EndIf
            Case "ComboBox", "ComboBoxEx32", "MSOBALLOONREComboBox20W", "REComboBox20W", "ThunderComboBox", "ThunderDriveListBox", "ThunderRT6ComboBox", "TORComboEdit", "TCombobox", "TComboBoxEx", "TORComboBox", "TColorBox", "TNFComboBox", "Internet Explorer_TridentCmbobx", "ComboWndClass", "_AOL_ComboBox", "ThunderRT5ComboBox", "ComboLBox"
                SoundPlay(@ScriptDir & "\focus_Audio\list.wav")
            Case "Edit", "SearchBox", "TChatRichEdit", "_WwN", "_WwO", "RichEdit20A", "RichEdit20WPT", "RICHEDIT60W", "OKttbx", "RichEditA", "ThunderTextBox", "ThunderRT6TextBox", "ThunderRT5TextBox", "TEdit", "TRichEdit", "TRichEditViewer", "TMemo", "TInplaceEditList", "TLabeledEdit", "TMaskEdit", "TDateTimePicker", "TRichEdit", "TCaptionMemo", "TAddictRichEdit", "TCaptionEdit", "RichTextWndClass", "TextWndClass", "PasswordWndClass", "TextAreaWndClass", "MSWorksDoc", "_AOL_Edit", "SysDateTimePick32"
                SoundPlay(@ScriptDir & "\focus_Audio\edit.wav")
            Case "ListBox", "ComboLBox", "REListBox20W", "SUPERGRID", "OUTEXVLB", "WMSUIVLB", "SchdmapiVLB", "VLBClass", "ThunderDirListBox", "ThunderFileListBox", "ThunderListBox", "ThunderRT6ListBox", "ThunderRT5ListBox", "TListbox", "TValueListEditor", "TORCalendar", "TColorListBox", "TCheckListBox", "Internet Explorer_TridentLstBox", "ListBoxWndClass", "ListWndClass", "hh_kwd_vlist", "afx:8:376:0:946", "_AOL_ListBox", "_AOL_Tree", ""
                SoundPlay(@ScriptDir & "\focus_Audio\List.wav")
            Case "SysListView32", "OpenListView", "wuDuiListView", "ListView20WndClass", "TcxGridSite", "TListView", "TSystemListView", "ListViewWndClass", ""
                SoundPlay(@ScriptDir & "\focus_Audio\ListView.wav")
            Case "SysTreeView32", "SearchTreeList", "FeatureTree", "TreeView20WndClass", "TSystemTreeView", "TTreeView", ""
                SoundPlay(@ScriptDir & "\focus_Audio\TreeView.wav")
            Case Else
                SoundPlay(@ScriptDir & "\focus_Audio\focus.wav")
        EndSwitch
    EndIf
    $h_CurrentHWNDFocus = $h_NewHWNDFocus
    $h_CurrentControlHWNDFocus = $h_NewControlHWNDFocus
    AdlibRegister("WindowAudioFocus", 50)
    Return 1
EndFunc   ;==>WindowAudioFocus
Func _IsCheckBox($ctrl_hwnd)
    $Style = _WinAPI_GetWindowLong($ctrl_hwnd, $GWL_STYLE)
    Return BitAND($Style, $BS_CHECKBOX) = $BS_CHECKBOX
EndFunc   ;==>_IsCheckBox
    Func _IsRadio($ctrl_hwnd)
    $Style = _WinAPI_GetWindowLong($ctrl_hwnd, $GWL_STYLE)
    Return BitAND($Style, $BS_AUTORADIOBUTTON) = $BS_AUTORADIOBUTTON
EndFunc   ;==>_IsRadio


what i need from you is :
play a sound when a menu item focus, that sound named menu.wav
play a sound named items.wav when the users move on list box items or list view or treeview items or a combobox items
please if can any one help me i'll very happy
thanks on advance

Edited by nacerbaaziz

Share this post


Link to post
Share on other sites

@nacerbaaziz
Post a runnable script so we can help you from there :)


Click here to see my signature:

Spoiler

Thoughts:

  • I will always thank you for the time you spent for me.
    I'm here to ask, and from your response, I'd like to learn.
    By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

ALWAYS GOOD TO READ:

 

Share this post


Link to post
Share on other sites

May I make a simple suggestion:

When building stuff like this, start small and only use a few classes. Get that working, Then add a class, test again. Once you get that test to pass, save that copy of the script then repeat the cycle. This way when something goes wrong, you have a MUCH simpler time trying to figure out what is broke. Right now you have a large script and I have no idea what the problem is or what is not working.

Share this post


Link to post
Share on other sites

sir, i haven't any problem, i wanna add a futures and i asked for the help. what i need is to get the menu item focus to play a sound, and get list items and comboboxes item focus and  play a sound when navigating.

if any one can help me i'll very happy

Share this post


Link to post
Share on other sites

@nacerbaaziz

For the various Focus/Hover events on those controls, you may take a look at WM_COMMAND and WM_NOTIFY handlers.

These two handlers "capture" messages sent from or to the various controls in a GUI (click, double click, drag, and so on), and you can use them to make some fun things.

For example, there is a Notification Code (so are called) that is sent by a ListView when you hover on an item, which is called $LVN_HOTTRACK.

You could use it to do what you need.

There are plenty samples on the Forums; just take a look at and play with them :)


Click here to see my signature:

Spoiler

Thoughts:

  • I will always thank you for the time you spent for me.
    I'm here to ask, and from your response, I'd like to learn.
    By my knowledge, I can help someone else, and "that someone" could help in turn another, and so on.

/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

ALWAYS GOOD TO READ:

 

Share this post


Link to post
Share on other sites

hello again

i search allot and at the end i found the WM_menuSelect

when i tried it in a internal  GUI it worked

but i did not know how to use it with the External Windows

here is the code that i tried

#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
    $menuGUI = GUICreate("menu")
$menuFile = GUICtrlCreateMenu("&file")
$menuOpen = GUICtrlCreateMenuItem("&Open", $menuFile)
$menuGo = GUICtrlCreateMenuItem("&get", $menuFile)
GUISetState()
    GUIRegisterMsg($WM_MENUSELECT, "WM_MENUSELECT")
While 1
Switch GUIGetMSG()
case "-3", 3
exit
EndSwitch
Wend
Func WM_MENUSELECT($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam, $lParam
soundPlay("focus_Audio\menu.wav")
EndFunc   ;==>WM_COMMAND
     
     

i hope that any one can help me to do that

Share this post


Link to post
Share on other sites

hello sir @Nine , i find this, but i couldn't know how to use it to get the menu focus or  the listView items when changed.
that what i can't do.
am sure that it posible because the screen readers do that.
i hope you can help me, because i will add a new wey for the blind to navigate their computers.
i am making a tool that add a shortCut keys to move Between the different classes, also it play a sount to each different control

#include <WinAPISysWin.au3>
    HotKeySet("{ESC}", "Close") ; Set ESC as a hotkey to exit the script.
    Global $g_tStruct = DllStructCreate($tagPOINT) ; Create a structure that defines the point to be checked.
    Example()
    Func Example()
    Local $hWnd
        While 1
        ToolTip("")
        Position() ; Update the X and Y elements with the X and Y co-ordinates of the mouse.
        $hWnd = _WinAPI_WindowFromPoint($g_tStruct) ; Retrieve the window handle.
        ToolTip($hWnd) ; Set the tooltip with the handle under the mouse pointer.
        Sleep(100)
    WEnd
EndFunc   ;==>Example
    Func Position()
    DllStructSetData($g_tStruct, "x", MouseGetPos(0))
    DllStructSetData($g_tStruct, "y", MouseGetPos(1))
EndFunc   ;==>Position
Func Close()
    Exit
EndFunc   ;==>Close


i hope that you can help me
greetings

Edited by nacerbaaziz

Share this post


Link to post
Share on other sites
1 hour ago, Nine said:

After you get the $hWnd you can use any other function like _WinAPI_GetClassName

i got the class and all controls worked fine

but the problem with the menus and the lists items i couldn't get the focus on them 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By antonioj84
      I am not able to use the $GUI_READ_EXTENDED with the  Metro UDF,  any work around ?
      Local $aPos[2] = [$Radio1, $Radio2] For $Radio In $aPos If GUICtrlRead($Radio) = $GUI_UNCHECKED Then ContinueLoop IniWrite($sGUIstate_IniFile, "Data", "POS", GUICtrlRead($Radio, $GUI_READ_EXTENDED)) ;; return the text of the menu item ExitLoop Next  
    • By _Vlad
      Hello forum,
      I want to create a program with multiple menus and many elements inside. The problem is my way of doing this and below I have an example of how I do these menus.
      I know it's a bad way of doing them as using this method for more elements and menus cause big flickering.
       
      Can someone please help me with some tips of optimizing this or tell me another way of creating that menus with many elements without cause flickering? From a long time ago I still try to solve this but without any results, just small improvements.
      Many thanks for everyone.
      #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Global $MENU_HOVER = '' Global $MENU_SELECTED = '' Global $COLOR_STANDARD = 0x94A5E9 Global $COLOR_HOVER = 0x8292d1 Global $COLOR_SELECTED = 0x7584bf $MENU = GUICreate("Menu", 615, 437, -1, -1, -1, -1, 0) GUISetFont(10, 400, 0, "Arial") $MENU_1 = GUICtrlCreateLabel("Menu 1", 8, 24, 106, 28, BitOR($SS_CENTER, $SS_CENTERIMAGE)) $MENU_2 = GUICtrlCreateLabel("Menu 2", 8, 56, 106, 28, BitOR($SS_CENTER, $SS_CENTERIMAGE)) $MENU_3 = GUICtrlCreateLabel("Menu 3", 8, 88, 106, 28, BitOR($SS_CENTER, $SS_CENTERIMAGE)) ;MENU 1 ELEMENTS $MENU_1_ELEMENT_1 = GUICtrlCreateButton("Menu1 Button", 128, 24, 147, 25) ;MENU 2 ELEMENTS $MENU_2_ELEMENT_1 = GUICtrlCreateButton("Menu2 Button", 128, 24, 147, 25) $MENU_2_ELEMENT_2 = GUICtrlCreateLabel("Another element", 128, 64, 99, 20) _Design() _Hide_All() GUISetState(@SW_SHOW, $MENU) While 1 $Cursor = GUIGetCursorInfo($MENU) $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $MENU_1 _Previous_Selected_Cancel() $MENU_SELECTED = 'Menu1' GUICtrlSetBkColor($MENU_1, $COLOR_SELECTED) _Show('Menu1') Case $MENU_2 _Previous_Selected_Cancel() $MENU_SELECTED = 'Menu2' GUICtrlSetBkColor($MENU_2, $COLOR_SELECTED) _Show('Menu2') Case $MENU_3 _Previous_Selected_Cancel() $MENU_SELECTED = 'Menu3' GUICtrlSetBkColor($MENU_3, $COLOR_SELECTED) _Show('Menu3') EndSwitch If $Cursor[4] = $MENU_1 Then If $MENU_HOVER <> 'Menu1' And $MENU_SELECTED <> 'Menu1' Then _Previous_Hover_Cancel() GUICtrlSetBkColor($MENU_1, $COLOR_HOVER) $MENU_HOVER = 'Menu1' EndIf ElseIf $Cursor[4] = $MENU_2 Then If $MENU_HOVER <> 'Menu2' And $MENU_SELECTED <> 'Menu2' Then _Previous_Hover_Cancel() GUICtrlSetBkColor($MENU_2, $COLOR_HOVER) $MENU_HOVER = 'Menu2' EndIf ElseIf $Cursor[4] = $MENU_3 Then If $MENU_HOVER <> 'Menu3' And $MENU_SELECTED <> 'Menu3' Then _Previous_Hover_Cancel() GUICtrlSetBkColor($MENU_3, $COLOR_HOVER) $MENU_HOVER = 'Menu3' EndIf Else _Previous_Hover_Cancel() $MENU_HOVER = 'Idle' EndIf WEnd Func _Design() GUICtrlSetColor($MENU_1, 0xFFFFFF) GUICtrlSetBkColor($MENU_1, $COLOR_STANDARD) GUICtrlSetCursor($MENU_1, 0) GUICtrlSetColor($MENU_2, 0xFFFFFF) GUICtrlSetBkColor($MENU_2, $COLOR_STANDARD) GUICtrlSetCursor($MENU_2, 0) GUICtrlSetColor($MENU_3, 0xFFFFFF) GUICtrlSetBkColor($MENU_3, $COLOR_STANDARD) GUICtrlSetCursor($MENU_3, 0) EndFunc ;==>_Design Func _Hide_All() GUICtrlSetState($MENU_1_ELEMENT_1, $GUI_HIDE) GUICtrlSetState($MENU_2_ELEMENT_1, $GUI_HIDE) GUICtrlSetState($MENU_2_ELEMENT_2, $GUI_HIDE) EndFunc ;==>_Hide_All Func _Show($MENU_SHOW) _Hide_All() If $MENU_SHOW = 'Menu1' Then GUICtrlSetState($MENU_1_ELEMENT_1, $GUI_SHOW) ElseIf $MENU_SHOW = 'Menu2' Then GUICtrlSetState($MENU_2_ELEMENT_1, $GUI_SHOW) GUICtrlSetState($MENU_2_ELEMENT_2, $GUI_SHOW) ElseIf $MENU_SHOW = 'Menu3' Then EndIf EndFunc ;==>_Show Func _Previous_Hover_Cancel() If $MENU_HOVER = 'Menu1' Then If $MENU_SELECTED <> 'Menu1' Then GUICtrlSetBkColor($MENU_1, $COLOR_STANDARD) ElseIf $MENU_HOVER = 'Menu2' Then If $MENU_SELECTED <> 'Menu2' Then GUICtrlSetBkColor($MENU_2, $COLOR_STANDARD) ElseIf $MENU_HOVER = 'Menu3' Then If $MENU_SELECTED <> 'Menu3' Then GUICtrlSetBkColor($MENU_3, $COLOR_STANDARD) EndIf EndFunc ;==>_Previous_Hover_Cancel Func _Previous_Selected_Cancel() If $MENU_SELECTED = 'Menu1' Then GUICtrlSetBkColor($MENU_1, $COLOR_STANDARD) If $MENU_SELECTED = 'Menu2' Then GUICtrlSetBkColor($MENU_2, $COLOR_STANDARD) If $MENU_SELECTED = 'Menu3' Then GUICtrlSetBkColor($MENU_3, $COLOR_STANDARD) EndFunc ;==>_Previous_Selected_Cancel  
    • By Tony007
      Hi,
      is it possible to export only the area "$idOutput" with the TEXT as a PNG?
      Thanks
      #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> Example() Func Example() Local $hGUI = GUICreate("Test", 700, 700, -1, -1) Local $input1 = GUICtrlCreateInput("", 10, 10, 150, 20) Local $idButtonStart = GUICtrlCreateButton("Start", 200, 10, 50, 30) Local $idButtonClear = GUICtrlCreateButton("Clear", 260, 10, 50, 30) Local $idButtonExport = GUICtrlCreateButton("Export", 320, 10, 50, 30) Local $idOutput = GUICtrlCreateLabel("TEXT", 10, 50, 500, 500, BitOR($BS_PUSHLIKE, $SS_CENTER)) GUICtrlSetFont($idOutput, 45, 800, "", "Impact") GUISetState(@SW_SHOW, $hGUI) ; Run the GUI until the dialog is closed While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idButtonStart $ContentInput1 = GUICtrlRead($input1) GUICtrlSetData($idOutput, $ContentInput1) Case $idButtonClear GUICtrlSetData($input1, "") GUICtrlSetData($idOutput, "") Case $idButtonExport EndSwitch WEnd GUIDelete($hGUI) Exit EndFunc ;==>Example  
    • By muchki
      i am more or less happy with my code
      only the X button does not exit
      what can i do?
      I made an 'exit' button and it works
      pressing Esc works
      just the X button not working
       
      here's my code:
       
      URLTrimmer 1.5.2 12 21 2019.txt
    • By nacerbaaziz
      screen curtain on autoit windows 8 +
      hello autoit forum please i've a question
      on windows 8 and more the micro soft added the Magnification options
      this future can help the blind by turn the screen black to To relax the eyes.
      i searched allot in autoit but i couldn't find any way to do it
      and after then i found an python addon can do that, it's an addon open source to screen reader NVDA
      i hope you can help me to convert it to an autoit script
      note i couldn't do that because I'm very fresh man in dealing with dll files
      inadition to am 0 on python
      please if any one can help me.
      this is the NVDA Python Addon it very small, i need just one future that turn the screen black
      thx in advance
       
      screenCurtain.rarr
       
×
×
  • Create New...