Clever-Excel-Forum

Normale Version: Auslesen eines Inhaltes einer anderen Applikation (2)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag liebe Excel-Experten

Mit der Hilfe von Schauan konnte ich den nachfolgenden Code zum Laufen bringen und aus einer Anwendung einen Text auslesen. Leider funktioniert das seit dem Release der Oracle-Datenbank nicht mehr, obwohl keine inhaltliche Änderungen oder gar andere Felder enthalten sind. Woran kann das liegen. Wo könnte ich schrauben?
Vielen Dank für Eure wertvolle Unterstützung.

Grüsse
Stefan



Code:
Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Const GC_CLASSNAMEMSFORM = "ThunderDFrame"
Const GWL_STYLE = -16
Const WS_VISIBLE = &H10000000
'Zwischenspeicher
Private Declare Function SendMessage Lib "user32" Alias _
        "SendMessageA" (ByVal hwnd As Long, ByVal wMsg _
        As Long, ByVal wParam As Long, ByVal lParam As _
        Any) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal _
        xPoint As Long, ByVal yPoint As Long) As Long
       
Private Declare Function GetCursorPos Lib "user32" (lpPoint As _
        POINTAPI) As Long
       
Private Declare Function GetClassName Lib "user32" Alias _
        "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName _
        As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetParent Lib "user32" _
        (ByVal hwnd As Long) As Long
     
Private Type POINTAPI
  x As Long
  y As Long
End Type
Const WM_SETTEXT = &HC
Const WM_GETTEXT = &HD

Function InOutText(bC As Byte, sOutText As String) As String
Dim Result&, Handle&, Parent, p As POINTAPI, Buffer$, Class$
    Result = GetCursorPos(p)
    Handle = WindowFromPoint(p.x, p.y)
    Parent = GetParent(Handle)
    Class = SPACE$(128)
    Result = GetClassName(Handle, Class, 128)
    Class = LCase(Left$(Class, Result))
    '---------------------------------------------------------------
    'ErrorHandler
    On Error Resume Next    
    '---------------------------------------------------------------
    'If InStr(1, Class, "edit") <> 0 Or _
       InStr(1, Class, "text") <> 0 Then
        If bC = 1 Then
          Buffer = SPACE$(32767)
          Result = SendMessage(Handle, WM_GETTEXT, Len(Buffer), _
                               ByVal Buffer)
          InOutText = Left$(Buffer, Result)
        Else
          Call SendMessage(Handle, WM_SETTEXT, 0&, _
                           ByVal CStr(sOutText))
          InOutText = "erfolgt"
        End If
    'End If
 End Function
Hallo Stefen,

was bedeutet denn "funktioniert ... nicht mehr" ? Kommt eine Fehlermeldung, kommen keine Daten, sind Daten unvollständig, ... ? Wie erfolgt der Aufruf von InOutText ?