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