Seite 2 von 2

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 20.09.2012 10:51
von ts-soft
Suchst Du nicht eher sowas: ReadDirectoryChanges?

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 20.09.2012 11:13
von RSBasic
@ts-soft
Funktioniert es überhaupt damit, wenn man im Windows Explorer nur einen Ordner öffnet, ohne Änderungen (Erstellung, Änderung/Speicherung, Umbenennung und Entfernung einer Datei oder eines Ordners) vorgenommen zu haben?
Er will ja eigentlich nur wissen, ob ein Ordner(fenster) geöffnet wurde:
TheNewOne hat geschrieben:Ist es möglich, dass man die Abfrage die ganze Zeit aktualisiert, so dass der name des Fensters angezeigt wird, sobald es geöffnet wird?
Ansonsten mal abwarten, was er sagt. Vielleicht meint er doch was Anderes.

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 20.09.2012 14:29
von TheNewOne
ts-soft hat geschrieben:Suchst Du nicht eher sowas: ReadDirectoryChanges?
Danke, aber nein. Mit dem Code kann man ja nicht sehen ob ein Ordner nur geöffnet wurde.

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 20.09.2012 14:54
von RSBasic
@TheNewOne
Hast du es nun hingekriegt?
Wenn nicht:

Code: Alles auswählen

EnableExplicit

Define EventID

Structure tFolderWindow
  hWnd     .i [ $FF ]
  sTitle   .s [ $FF ]
  nEntries .i
  nCurrent .i
EndStructure

Define.tFolderWindow *FolderWindow
Define FolderWindows.tFolderWindow

Procedure.i _ExamineFolderProc ( hWnd.i , *FolderWindows.tFolderWindow )
  Protected sClassName .s = Space ( $FF )
  Protected sWindowName.s
  
  GetClassName_( hWnd , @ sClassName , $FF )
  If sClassName = "CabinetWClass"
    sWindowName = Space ( $FF )
    GetWindowText_( hWnd , @ sWindowName , $FF )
    *FolderWindows\hWnd   [ *FolderWindows\nEntries ] = hWnd
    *FolderWindows\sTitle [ *FolderWindows\nEntries ] = sWindowName
    *FolderWindows\nEntries + 1
  EndIf
  
  ProcedureReturn #True
EndProcedure

Procedure ExamineFolderWindows ()
  Shared FolderWindows.tFolderWindow
  
  FolderWindows\nEntries = 0
  FolderWindows\nCurrent = 0
  
  ProcedureReturn EnumWindows_( @ _ExamineFolderProc () , FolderWindows )
EndProcedure

Procedure NextFolderWindow ()
  Shared FolderWindows.tFolderWindow
  Static Current      .tFolderWindow
  
  If FolderWindows\nCurrent => FolderWindows\nEntries
    ProcedureReturn #Null
  EndIf
  
  Current\hWnd   = FolderWindows\hWnd    [ FolderWindows\nCurrent ]
  Current\sTitle = FolderWindows\sTitle  [ FolderWindows\nCurrent ]
  
  FolderWindows\nCurrent + 1
  
  ProcedureReturn Current
EndProcedure

Procedure GetExplorerFolderList()
  Protected.tFolderWindow *FolderWindow
  ClearGadgetItems(1)
  
  If ExamineFolderWindows()
    Repeat
      *FolderWindow = NextFolderWindow()
      If *FolderWindow
        AddGadgetItem(1,-1,*FolderWindow\sTitle+Chr(10)+Str(*FolderWindow\hWnd),0,0)
      EndIf     
    Until Not *FolderWindow
  EndIf
  
  Debug "Aktualisiert."
  
EndProcedure

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListIconGadget(1,10,10,480,380,"Titel",200,0)
  AddGadgetColumn(1,1,"Handle",200)
  
  AddWindowTimer(0, 123, 500)
  
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_Timer And EventTimer() = 123
      GetExplorerFolderList()
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Wird jetzt alle 500ms aktualisiert und wenn ein neuer Ordner geöffnet wurde, wird es spät. nach 500ms in der Liste angezeigt.

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 20.09.2012 14:57
von TheNewOne
Vielen Dank RSBasic.
Ich habe schon probiert, aber es nicht richtig hinbekommen, in deiner Lösung habe ich dann gesehen dass ich auf dem richtigen Weg war. ;)

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 20.09.2012 16:54
von ts-soft
RSBasic hat geschrieben:Ansonsten mal abwarten, was er sagt. Vielleicht meint er doch was Anderes.
Deswegen ja meine Nachfrage. Es wurde ja nicht gesagt, wofür das ganze nötig ist und eine Überwachung
auf Änderungen macht viel öfter Sinn (z.B. MediaPlayer MusikDB aktualsieren usw.)