Abfrage ob ein Ordner geöffnet wurde

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Abfrage ob ein Ordner geöffnet wurde

Beitrag von ts-soft »

Suchst Du nicht eher sowas: ReadDirectoryChanges?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Abfrage ob ein Ordner geöffnet wurde

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
TheNewOne
Beiträge: 60
Registriert: 06.04.2011 14:33

Re: Abfrage ob ein Ordner geöffnet wurde

Beitrag 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.
Win7, 64bit, PB 4.60
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Abfrage ob ein Ordner geöffnet wurde

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
TheNewOne
Beiträge: 60
Registriert: 06.04.2011 14:33

Re: Abfrage ob ein Ordner geöffnet wurde

Beitrag 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. ;)
Win7, 64bit, PB 4.60
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Abfrage ob ein Ordner geöffnet wurde

Beitrag 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.)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten