Seite 1 von 2

Abfrage ob ein Ordner geöffnet wurde

Verfasst: 19.09.2012 13:42
von TheNewOne
Hallöchen,
ich wollte mal fragen, ob es irgendwie möglich ist, eine Abfrage einzurichten, die reagiert wenn man einen bestimmten Ordner öffnet.

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 19.09.2012 13:50
von RSBasic
Meinst du, du möchtest wissen, ob ein bestimmter Ordner im Windows Explorer offen ist?
http://www.rsbasic.de/aktualisierung/wi ... %20sind.pb
Das kannst du dann regelmäßig abfragen und wenn ein bestimmter Ordner in der zurückgegebenen Liste vorhanden ist, dann kannst du darauf reagieren.

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 19.09.2012 13:56
von TheNewOne
hmm, bei mir zeigt es in dem Fenster das der Code öffnen nichts an.

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 19.09.2012 13:59
von DrShrek
Funktioniert nich mit Win7 64bit

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 19.09.2012 13:59
von RSBasic
Hm, keine Ahnung. Welches OS und welche PB Version?
Ich habe hier unter Win 7 x64 mit PB 5.00 B2 x86 sowie x64 getestet und funktioniert einwandfrei.

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 19.09.2012 14:19
von TheNewOne
hmmm, ...
ich habe win7 64bit pb4.60 und bei mir funktioniert es nicht.

Edit: Es funktioniert doch! Ich habe nur beim ersten mal die Ordner geöffnet nachdem ich auf OK gedrückt habe.

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 19.09.2012 19:18
von TheNewOne
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?

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 19.09.2012 19:37
von RSBasic
Du kannst das doch selber mit einem Timer oder Thread regelmäßig abfragen, wo liegt das Problem?

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 19.09.2012 21:32
von TheNewOne
Das Problem ist, dass es bei mir nicht funktioniert...
Ich poste mal meinen Code, vielleicht findet ja jemand meinen/meine Fehler.

Code: Alles auswählen

Global start.i
Global ende.i
Global mindest.i
mindest = 2000

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

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

If OpenWindow(0, 650, 150, 500, 500, "Offene Fenster")
  ListViewGadget(0,2,2,400,500)
  Define.tFolderWindow *FolderWindow

    again:
    ClearGadgetItems(0)
    If ExamineFolderWindows()
      Repeat
        *FolderWindow = NextFolderWindow()
        If *FolderWindow
          AddGadgetItem(0, -1,*FolderWindow\sTitle+Chr(10)+Str(*FolderWindow\hWnd))
        EndIf     
      Until Not *FolderWindow
    EndIf
    start = ElapsedMilliseconds()
    pos1:
    ende = ElapsedMilliseconds()
    If ende - start < mindest
      Delay(1)
      Goto pos1
    Else
      Goto again
    EndIf
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
    
EndIf

Re: Abfrage ob ein Ordner geöffnet wurde

Verfasst: 20.09.2012 07:31
von RSBasic
Mir sind zufällig drei Punkte aufgefallen:
1. Bitte keine Gotos verwenden
2. Auch Keine Delays in Events
3. EnableExplicit

Schau mal in der PB-Hilfe unter "AddWindowTimer()". Damit kannst du zeitgesteuert deine Vorgänge durchführen lassen.