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.