Jump to content

junkew

MVPs
  • Posts

    3,063
  • Joined

  • Last visited

  • Days Won

    14

junkew last won the day on February 16

junkew had the most liked content!

About junkew

Profile Information

  • Location
    Netherlands, Oostzaan

Recent Profile Visitors

4,641 profile views

junkew's Achievements

  1. Is that a question? You can interact with scrollbars using IUIAutomation. The wrappers I made are not wrapping all possibilities there are many examples made on the forum around IUIAutomation just search and you will find a lot. UIASpy is a nice one that gives you directly when you spy the ability to generate code for it. Using the keyboard with send can be in many cases a good alternative its just one of the things you can use when you want to automate a GUI. Microsoft supports the basic scrolling unfortunately many suppliers of derived scrollbars implement not full logic for IuIAutomation. Basically they should if they want to have their applications accessible for the impaired people. https://learn.microsoft.com/en-us/dotnet/framework/ui-automation/ui-automation-support-for-the-scrollbar-control-type
  2. This is in the wrappers with propertyvalue, property and most likely when I wrote the library I had to deal with textboxes from java or other not fully iUIAutomation compatible textboxes and choosed to do it by keyboard commands and have another way to get to the propertys by a property command action. Case "propertyvalue", "property" Local $i = _UIA_getPropertyIndex($p1) If Not @error <> 0 Then $retValue = _UIA_getPropertyValue($obj2ActOn, $UIA_propertiesSupportedArray[$i][1]) Else $retValue = _UIA_getPropertyValue($obj2ActOn, $p1) EndIf and implemented like Func _UIA_getPropertyValue($UIA_oUIElement, $id) Local $tmpValue, $tmpStr, $iProperty If Not _UIA_IsElement($UIA_oUIElement) Then Return SetError($_UIASTATUS_GeneralError, $_UIASTATUS_GeneralError, "** NO PROPERTYVALUE DUE TO NONEXISTING OBJECT **") EndIf $UIA_oUIElement.GetCurrentPropertyValue($id, $tmpValue) $tmpStr = "" & $tmpValue If IsArray($tmpValue) Then $tmpStr = "" For $iProperty = 0 To UBound($tmpValue) - 1 $tmpStr = $tmpStr & StringStripWS($tmpValue[$iProperty], $STR_STRIPLEADING + $STR_STRIPTRAILING) If $iProperty <> UBound($tmpValue) - 1 Then $tmpStr = $tmpStr & ";" EndIf Next Return $tmpStr EndIf Return SetError($_UIASTATUS_GeneralError, $_UIASTATUS_GeneralError, $tmpStr) EndFunc ;==>_UIA_getPropertyValue And setting your keyboard focus back to begin or end could be done with keys like ctrl+home and ctrl+end. There are to many aspects in remotely controlling different applications and all kinds of different textboxes from different programming languages. Nowadays probably more and more html frontend applications but in 2010-2015 dealing with many windows UX technologies (Visual Basic, Java, Win32 forms, Delphi, HTML, QWidgets, ....)
  3. maybe findbmp is an alternative. Wrote that long time ago but still works.
  4. You could have tried faq31 with simplespy or inspect.exe to see if more is recognized.
  5. Interesting but if Au3Inf is seeing it you should be able to handle it. https://learn.microsoft.com/en-us/shows/visual-studio-toolbox/xaml-islands Try FAQ 31 with UIAutomation Whats the output of this Example() Func Example() ; Retrieve a list of window handles. Local $aList = WinList() ; Loop through the array displaying only visable windows with a title. For $i = 1 To $aList[0][0] If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 2) Then consolewrite("Title: " & $aList[$i][0] & @CRLF & "Handle: " & $aList[$i][1] & @CRLF) ; Retrieve the classlist of the window using the handle returned . Local $sClassList = WinGetClassList($aList[$i][1]) consolewrite(stringreplace($sClassList,@LF,@LF & " -")& @CRLF) EndIf Next EndFunc ;==>Example
  6. This seems to work for both controls but you have to set the rich text box first to point 0,0 The reverse order is not working #include <EditConstants.au3> #include <GuiEdit.au3> #include <GuiRichEdit.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Example() Func Example() Local $hGui=GUICreate("My GUI edit and rich edit") ; will create a dialog box that when displayed is centered local $someTextLines=stringreplace("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","x", "line" & @crlf) Local $idMyedit = GUICtrlCreateEdit($someTextLines & @CRLF, 10, 10, 350, 180, $ES_MULTILINE+$ES_AUTOVSCROLL + $WS_VSCROLL) Local $hRichEdit = _GUICtrlRichEdit_Create($hGui, $someTextLines, 10, 210, 350, 180, bitor($ES_MULTILINE, $ES_AUTOVSCROLL, $WS_VSCROLL)) ;~ Important line _GUICtrlRichEdit_SetSel($hRichEdit, 0, 0) GUISetState(@SW_SHOW) ;~ GUICtrlSendMsg ($hRichEdit, $EM_LINESCROLL, 0, 0) local $i For $i=10 to 20 ;~ _GUICtrlEdit_LineScroll($idMyedit, 0, _GUICtrlEdit_GetLineCount($idMyedit)) ;~ _GUICtrlEdit_LineScroll($hRichEdit, 0, _GUICtrlEdit_GetLineCount($hRichEdit)) _GUICtrlEdit_LineScroll($idMyedit, 0, $i) _GUICtrlEdit_LineScroll($hRichEdit, 0, $i) ;~ GUICtrlSendMsg ($hRichEdit, $EM_LINESCROLL, 0, $i) ;~ Local $nIndex = GUICtrlSendMsg ($hRichEdit, $EM_LINEINDEX, $i, 0) ;~ GUICtrlSendMsg ($hRichEdit, $EM_SETSEL, $nIndex, 0) ;~ ControlCommand ($hGUI, "", $hRichEdit, "SetCurrentSelection", @CRLF) ;~ $iCharPosition = _GUICtrlRichEdit_GetFirstCharPosOnLine($hRichEdit, $i) ;~ _GUICtrlRichEdit_SetSel($hRichEdit, $iCharPosition, $iCharPosition + 4) sleep(250) next ;~ Important line ;~ _GUICtrlEdit_SetSel($idMyedit, -1, -1) ;~ _GUICtrlRichEdit_SetSel($hRichEdit, -1,-1) For $i=10 to 0 step -1 _GUICtrlEdit_LineScroll($idMyedit, 0, $i) _GUICtrlEdit_LineScroll($hRichEdit, 0, $i) sleep(250) next ; Loop until the user exits. While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd GUIDelete() EndFunc ;==>Example
  7. https://www.autoitscript.com/autoit3/docs/libfunctions/_GUICtrlRichEdit_FindText.htm https://www.autoitscript.com/autoit3/docs/libfunctions/_GUICtrlRichEdit_GotoCharPos.htm Goto 0 and in a loop find carriage return Probably with those messages you will be able to do this EM_POSFROMCHAR EM_CHARFROMPOS EM_LINEFROMCHAR EM_LINEINDEX EM_LINESCROLL And the editcontrol functions should work also otherwise you need sendmessage function with windows messages https://learn.microsoft.com/en-us/windows/win32/controls/about-rich-edit-controls https://www.autoitscript.com/autoit3/docs/libfunctions/_GUICtrlEdit_LineScroll.htm
  8. https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/wintouch/architectural-overview.md is having WM_TOUCH messages. Then it depends afterwards what the driver is doing if its a nice driver it uses sendinput for driving the keyboard and/or mouse. (which you then can hook with a keyboard hook) And not sure where MS is going with WinUI: https://learn.microsoft.com/en-us/uwp/api/windows.ui.input.preview.injection?view=winrt-26100
  9. @Nine saying the same but with different wording😀 for sure its in the area of lowlevel messaging and hooking. With the limiterd amount of information how the swipe driver is sending ctrl and left its hard to guess which messages to hook.
  10. https://learn.microsoft.com/en-us/windows/win32/winmsg/about-messages-and-message-queues The whole windows system is based on messaging. Your swipedevice has a driver that if it nicely behaves transforms your guesture to a sendinput or sendmessage for a keyboardmessage ctrl and left. So you must know which messages the driver is sending and then you have to catche.hook them. An advanced topic where you probably have to read a lot.
  11. https://www.autoitscript.com/autoit3/docs/libfunctions/_WinAPI_SetWindowsHookEx.htm
  12. To make it complete. The BSTR has a definition: https://learn.microsoft.com/en-us/previous-versions/windows/desktop/automat/bstr?redirectedfrom=MSDN And some nice topic on many variable types was made by @LarsJ
  13. The syntax is: object.Add key, item object.Item (key) [ = newitem ] so if you add it twice you have a duplicate key error so the 2nd time you should use the item syntax
  14. Waiting for the fasm version and see if OP gets any version 100% running.
×
×
  • Create New...