Seite 1 von 1

Hyperlinkgadget - URL extern ermitteln ?

Verfasst: 17.07.2011 15:30
von thminz
Moin! Ich suche eine möglichkeit wo mit ich herausfinden kann was für eine URL sich hinter einen Hyperlinkgadget befindet.

Ich habe zwei Fenster erstellt und möchte das mein erstes Fenster in der Lage ist auf das zweite Fenster zuzgreifen und die URL eines Hyperlinkgadget im zweiten Fenster herauszufinden.

Aber ich weis leider nicht wie ich das machen kann. Mit Boardmitteln geht das glaube ich nicht. API erforderlich ? Wenn ja wäre echt coool wenn mir jemand zeigen würde wie man die URL des Hyperlinkgadget im zweitn Fenster herausfinden kann.

Re: Hyperlinkgadget - URL extern ermitteln ?

Verfasst: 17.07.2011 17:29
von ts-soft
Das einfachste wäre es, die URL in eine Textdatei zu schreiben, wo das zweite Fenster diese dann ausliest.
Ansonsten gäbe es noch Kommunikation der Fenster über Messages, SharedMemory, Pipes, Mailslots, Network usw.

Gruß
Thomas

Re: Hyperlinkgadget - URL extern ermitteln ?

Verfasst: 18.07.2011 05:25
von BSP
Hallo thminz.

Ist vermutlich nicht ganz das, was Du möchtest,
aber damit kannst Du schon mal alles auslesen,
was Du möchtest,
Funktioniert mit WORD- Text genauso wie mit der Firerfox- Adressleiste.
(Und sogar mit diesem Text).
Text markieren, Kopieren und schwups,
isses in Deinem Editorgadget.

Code: Alles auswählen


Enumeration
  #_IDWin
EndEnumeration

_Flag = #PB_Window_SystemMenu
_Flag | #PB_Window_MaximizeGadget
_Flag | #PB_Window_MinimizeGadget
_Flag | #PB_Window_ScreenCentered
OpenWindow(#_IDWin, 0, 0, 200, 400,"Fenster", _Flag)

editgadg=EditorGadget(#PB_Any,2,2,198,240)

#img0=0
CreateImage#img0,1,1)

#img1=1
ImageGadget(#img1,2,248,100,100,0)

#img2=2

ClearClipboard()
Repeat

  ;Text Kopieren
  a$=GetClipboardText()
  If a$<>""
    AddGadgetItem(editgadg,-1,a$)
    ClearClipboard()
  EndIf
  
  ; Und so bekomme ich Dein Bildchen
  a=GetClipboardImage(#img2)
  If a
    CopyImage(#img2,#img0)
    SetGadgetState((#img1),ImageID(#img0))
    ClearClipboard()
  EndIf
  
  Select WaitWindowEvent()
    Case #WM_CLOSE: ende=1
  EndSelect
  
Until ende
Gruß: BSP

Re: Hyperlinkgadget - URL extern ermitteln ?

Verfasst: 17.08.2013 06:13
von BSP
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