Hallo Allerseits.
Zum Auslesen von Adressleisten habe ich folgende Lösung gefunden:
Die EnumChildWindow - Proc. fand ich hier in diesem Forum,
den "SendMessage_(hChild,#WM_GETTEXT,255,@inhalt)" nach tagelanger Suche in einem C Forum.
Der Rest war ausprobieren.
A. Das Ganze funktioniert NICHT mit Firerfox,
sonst aber anscheinend mit jedem MS- Fenster
und Browsern, die auf MS- IExplorer aufsetzen.
B. Bei MS- Ordnerfenstern scheint die Adressleiste immer das erste Edit- Feld zu sein.
Bei Browsern gilt:
Jeder Browser hat seinen eigenen Classennamen;
welches Editfeld die Url beinhaltet, liegt beim Programmierer des Browsers.
Ich habe zwei Browser ausprobiert, MS-IExplorer + Avant (Nun wisst Ihr also, das ich auch den Avant benutze),
schnell einen eigenen Browser aus StringGadget + WebGadget zusammengeschustert
und verschiedene Ordner- Fenster geöffnet.
Braucht Ihr Weitere, müsst Ihr nach dem Classennamen und dem Edit- Feld suchen.
Dazu braucht Ihr in dem Prg. nur die "If ok" Abfragen in beiden Proceduren ausschalten.
; If ok
;EndIf
In dem Zusammenhang kommt mir nun eine weitere Frage:
Kann ich für meine Fenster auch eigene Classennamen vergeben
und wenn ja, wie?
Gruß:
Bernd
Code: Alles auswählen
Procedure EnumChildWindows(hChild,*browser)
  Shared i
  Protected title.s{1024}
  Protected inhalt.s{1024}
  Protected class.s{1024}
  Protected PID.l=0
  GetClassName_(hChild,@class,1024)  ;Fensterklasse auslesen
  If class = "Edit"
    i+1
    
    ; Verschiedene Browser abfragen
    If     PeekS(*browser) = "IEFrame"          And i = 1 : ok=1
    ElseIf PeekS(*browser) = "TfrmAvantBrowser" And i = 2 : ok=1
    ElseIf PeekS(*browser) = "WindowClass_0"    And i = 1 : ok=1
    ElseIf PeekS(*browser) = "CabinetWClass"    And i = 1 : ok=1
    EndIf
    
    If ok
      GetWindowText_(hChild,@title,1024)
      SendMessage_(hChild,#WM_GETTEXT,255,@inhalt) ; Hierin versteckt sich die URL
      GetWindowThreadProcessId_(hChild,@PID)
      Debug "- - - - - - - - - -"
      Debug "hchild = " + Str(hchild)
      Debug "Titel = " + title
      Debug "i = " +Str(i)+" : Inhalt = " + inhalt
      Debug "Class = " + class
      Debug "PID = " + Str(PID)
      ProcedureReturn #False
    EndIf
    
  EndIf
  ProcedureReturn #True
EndProcedure
Procedure EnumWindows(hWnd,Visibility) ;Prozedur, die die Handles der Fenster erhält
  If IsWindowVisible_(hWnd) Or Visibility=#False
    title.s{1024}
    class.s{1024}
    PID.l=0
    GetClassName_(hWnd,@class,1024)  ;Fensterklasse auslesen
    ; verschiedene Browser erkennen
    If     class = "IEFrame"          : ok=1
    ElseIf class = "TfrmAvantBrowser" : ok=1
    ElseIf class = "WindowClass_0"    : ok=1 ;ein eigener kleiner TestWebbrowser
    ElseIf class = "CabinetWClass"    : ok=1 ;MS- Ordner- Fenster
    EndIf
    
    If ok
      GetWindowText_(hWnd,@title,1024) ;Fenstertitel auslesen
      GetWindowThreadProcessId_(hWnd,@PID) ;PID des zugehörigen Prozesses auslesen
      Debug "   "
      Debug "============================================"
      Debug "[Title]= "+title+" [hWnd]= "+Str(hWnd)+" [ClassName]= "+class+" [PID]= "+Str(PID) ;Werte ausgeben
      Shared i
      i=0
      EnumChildWindows_(hWnd,@EnumChildWindows(),@class) ;ChildWindows auflisten
    EndIf
    
   EndIf
   ProcedureReturn #True
EndProcedure
EnumWindows_(@EnumWindows(),#True) ;#True, um nur sichtbare Fenster anzuzeigen; ansonsten #False