Text anhand des blinkenden Cursors auslesen

  • Hallo,

    ich habe bei mir einen Telefonanlage laufen die über eine WEB Oberfläche eine CIT Lösung ( Computergestütztes Telefonieren ) anbietet.
    Diese Oberfläche habe ich mir in eine kleine nette GUI eingebaut so das sie nur bei bedarf aufklappt
    und eben dann benutzbar ist.
    Jetzt hab ich mich dafür interessiert wie man es schafft das man eine Telefonnmmer die zB in einer Mail steht
    über den Mauszeiger in den Textblock hinein klickt und dann anhand der Cursorposition den Text auslesen kann.
    Meine Frage ist mit welchen Funktionen müsste arbeiten bzw in welche Richtung sollte ich suchen
    wenn ich eine Textinformation quasi über die Position des Cursor herausfinden möchte?

    Kann mir da jemand helfen?


    Hier noch meine kleine Software.
    Die Funktioniert natürlich nur an einer OpenCom 100 Anlage... vieleicht auch an einer 1000er


    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=telefon.ico
    #AutoIt3Wrapper_Outfile=OpenCom X320 - OpenCTI 50.exe
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.4
    #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Au3Check_Stop_OnWarning=y
    #AutoIt3Wrapper_Run_Tidy=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; *******************************************************
    ; Example 1 - Trap COM errors so that 'Back' and 'Forward'
    ; outside of history bounds does not abort script
    ; (expect COM errors to be sent to the console)
    ; *******************************************************
    ;

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    Opt("MustDeclareVars", 1) ; Variablen MÜSSEN Daklariert werden
    Opt('TrayOnEventMode', 0) ; Tray-Menü im OnEvent-Mode
    Opt("TrayAutoPause", 0) ; 0=no pause, 1=Pause
    Opt("TrayMenuMode", 1) ; Default tray menu items (Script Paused/Exit) will not be shown.
    Opt("TrayIconHide", 0) ;0=show, 1=hide tray icon

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $GUI_Titel = "OpenCom X320 - OpenCTI 50"
    Global $TK_Anlagen_Adresse = "192.168.99.254"
    Global $Benutzername = "BenutzerinderTKAnlage"
    Global $Passwort = "Passwort"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _IEErrorHandlerRegister()
    Local $oIE = _IECreateEmbedded()
    Global $CTI_GUi = GUICreate($GUI_Titel, 400, 580, _
    (@DesktopWidth - 400 - 15), (@DesktopHeight - 580 - 80), _
    $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
    Global $Tray_Menu_Aufklappen = TrayCreateItem("Aufklappen")
    Global $Tray_Menu = TrayCreateItem("")
    Global $Tray_Menu_Beenden = TrayCreateItem("Beenden")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW) ;Show GUI

    [/autoit] [autoit][/autoit] [autoit]

    Local $GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 400, 580)

    [/autoit] [autoit][/autoit] [autoit]

    _IENavigate($oIE, "http://" & $TK_Anlagen_Adresse & "/app-main.asp?app=3")
    _IELoadWait($oIE)

    [/autoit] [autoit][/autoit] [autoit]

    Global $oFrames = _IEFrameGetCollection($oIE)
    Global $iNumFrames = @extended
    For $i = 0 To ($iNumFrames - 1)
    Global $oFrame = _IEFrameGetCollection($oIE, $i)

    [/autoit] [autoit][/autoit] [autoit]

    If StringInStr(_IEPropertyGet($oFrame, "locationurl"), "app-login.asp?app=3", 1) Then

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $oForm = _IEFormGetObjByName($oFrame, "uf")
    Global $oText = _IEFormElementGetObjByName($oForm, "un")
    _IEFormElementSetValue($oText, $Benutzername)
    Sleep(150)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $oText = _IEFormElementGetObjByName($oForm, "pw")
    _IEFormElementSetValue($oText, $Passwort)

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(150)
    Send("{TAB}")
    Send("{ENTER}")

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_MINIMIZE, $CTI_GUi) ;Show GUI
    GUISetState(@SW_HIDE, $CTI_GUi) ;Show GUI

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    AdlibEnable("_myadlib", 1000)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1

    [/autoit] [autoit][/autoit] [autoit]

    Local $msg = GUIGetMsg()
    Local $msgT = TrayGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    Case $msgT = $Tray_Menu_Beenden
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $msgT = $Tray_Menu_Aufklappen
    GUISetState(@SW_SHOW, $CTI_GUi) ;Show GUI
    GUISetState(@SW_RESTORE, $CTI_GUi) ;Show GUI

    [/autoit] [autoit][/autoit] [autoit]

    Case Else
    If Not IsObj($oIE) Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    GUIDelete()

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _myadlib()

    [/autoit] [autoit][/autoit] [autoit]

    ; 21 = GUISetState(@SW_MINIMIZE, $CTI_GUi) + GUISetState(@SW_HIDE, $CTI_GUi)
    ; 23 = GUISetState(@SW_MINIMIZE, $CTI_GUi)
    ; 15 = GUISetState(@SW_SHOW, $CTI_GUi)
    ; 13 = GUISetState(@SW_HIDE, $CTI_GUi)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(WinGetState("OpenCom X320 - OpenCTI 50") & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    If WinGetState("OpenCom X320 - OpenCTI 50") = 23 Then
    GUISetState(@SW_MINIMIZE, $CTI_GUi) ;Show GUI
    GUISetState(@SW_HIDE, $CTI_GUi) ;Show GUI
    ElseIf WinGetState("OpenCom X320 - OpenCTI 50") = 7 Then
    GUISetState(@SW_SHOW, $CTI_GUi) ;Show GUI
    GUISetState(@SW_RESTORE, $CTI_GUi) ;Show GUI

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_myadlib

    [/autoit]

    Gruß Jan

  • Ja das habe ich schon in verschiedenen Varianten probiert

    etwa so:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Case _IsPressed("01") = True And _IsPressed("11") = True And $Schalter = 0 ; Linke Maustaste + Strg

    $Schalter = 1
    Local $GUI_Handle = _WinAPI_GetForegroundWindow()
    Local $tPoint = _WinAPI_GetMousePos()
    Local $tPoint2 = _WinAPI_GetMousePos(True, $GUI_Handle)

    ConsoleWrite("$tPoint X: " & DllStructGetData($tPoint, "X") & " $tPoint Y: " & DllStructGetData($tPoint, "Y") & @CRLF)
    ConsoleWrite("$tPoint2 X: " & DllStructGetData($tPoint2, "X") & " $tPoint2 Y: " & DllStructGetData($tPoint2, "Y") & @CRLF)
    Local $X = DllStructGetData($tPoint, "X")
    Local $Y = DllStructGetData($tPoint, "Y")
    ; 3-facher Mausklick
    MouseClick("left", $X, $Y, 3)
    Sleep(500)

    Send("^c")
    Local $String_aus_Zwischenablage = ClipGet()
    ConsoleWrite("-Text: " & $String_aus_Zwischenablage & @CRLF)

    [/autoit]

    oder auch so:

    Spoiler anzeigen
    [autoit]


    Case _IsPressed("01") = True And _IsPressed("11") = True And $Schalter = 0 ; Linke Maustaste + Strg

    $Schalter = 1
    Local $GUI_Handle = _WinAPI_GetForegroundWindow()
    Local $tPoint = _WinAPI_GetMousePos()
    Local $tPoint2 = _WinAPI_GetMousePos(True, $GUI_Handle)

    ConsoleWrite("$tPoint X: " & DllStructGetData($tPoint, "X") & " $tPoint Y: " & DllStructGetData($tPoint, "Y") & @CRLF)
    ConsoleWrite("$tPoint2 X: " & DllStructGetData($tPoint2, "X") & " $tPoint2 Y: " & DllStructGetData($tPoint2, "Y") & @CRLF)
    Local $X = DllStructGetData($tPoint, "X")
    Local $Y = DllStructGetData($tPoint, "Y")
    ; 3-facher Mausklick
    ControlClick("", "", "", "left", 3, $X, $Y)
    Sleep(500)

    Send("^c")
    Local $String_aus_Zwischenablage = ClipGet()
    ConsoleWrite("-Text: " & $String_aus_Zwischenablage & @CRLF)

    [/autoit]

    Aber das klappt bei erstan mal wenn man also mit der Maus in eine Nummer
    hinein klickt klappt es. Wenn ich dann aber nochmal eine andere Nummer
    Auswählen möchte ist immer noch die alte in der Zwischenablage.
    Erst nach mehrmaligen Auswählen ist dann auch eine andere Nummer
    in der Zwischenablage.


    Ich dachte das ich irgendwie mit dieser Funktion da rankommen würde

    [autoit]

    _WinAPI_GetCursorInfo()

    [/autoit]

    Aber geschaft hab ich da noch nichts.

    Einmal editiert, zuletzt von JanausSm (9. Februar 2013 um 15:35)