Seite 1 von 1

Pathrequester unter Windows ME

Verfasst: 25.03.2008 22:49
von stalky13
Hi leute...

ich hab folgendes problem unter Windows ME (bei XP funzts), nach einem aufruf von Pathrequester() funzt die function CreateFile() ned mer

Code: Alles auswählen

Debug PathRequester("Daten speichern in:", "C:\")

If CreateFile(0,"test.txt")
  WriteStringN(0,"Test")
  CloseFile(0)
  Debug "Datei erstellt"
Else
  Debug "Fehler"
EndIf
es wird keine Datei erstellt trozdem bekomme ich ein handel von createfile und ich bekomme auch keinen fehler oder so blos die datei wird nicht erstellt ... kommentiert man den Pathrequester aus dann funzt es wieder :? vieleicht kann man ja einen pathrequester oder sowas ähnliches über api aufrufen ich hab aber in der msdn unter Common Dialog Box Library nüx gefunden :roll: gibts den inner api? oda muss ich mir selbst was baun?

Verfasst: 25.03.2008 23:26
von ts-soft

Code: Alles auswählen

Procedure BrowseCallbackProc(hwnd, msg, lParam, lData)
  szDir.s = Space(#MAX_PATH)
  Select msg
    Case #BFFM_INITIALIZED
      SendMessage_(hwnd, #BFFM_SETSELECTION, #BFFM_INITIALIZED, lData)
    Case #BFFM_SELCHANGED
      If SHGetPathFromIDList_(lParam, @szDir)
        SendMessage_(hwnd, #BFFM_SETSTATUSTEXT, 0, @szDir)
      EndIf
  EndSelect
EndProcedure

Procedure.s BrowseForFolder(Style, Titel.s, Path.s)
  Folder.s = Space(#MAX_PATH)
  Dir.BROWSEINFO
  Dir\hwndOwner = GetActiveWindow_()
  Dir\pszDisplayName = @Folder
  Dir\lpszTitle = @Titel
  Dir\ulFlags = Style
  Dir\lpfn = @BrowseCallbackProc()
  Dir\lParam = @Path
  CoInitialize_(#Null)
  result.l = SHBrowseForFolder_(@Dir)
  SHGetPathFromIDList_(result, @Folder)
  If Folder <> ""
    If FileSize(Folder) = - 2
      If Right(Folder, 1) <> "\" : Folder + "\" : EndIf
    EndIf
  EndIf
  CoTaskMemFree_(result)
  ProcedureReturn Folder
EndProcedure
Den Rest sollteste in der MSDN oder PSDK finden

Gruß
Thomas

Verfasst: 26.03.2008 14:42
von AND51
Nur eine Idee, aber füge in deinem Code doch mal am Anfang und am ende folgende Befehle ein

Code: Alles auswählen

Debug GetPathPart(ProgramFilename())
Debug GetCurrentDirectory()
und schaue dort mal nach. Wenn die Datei korrekt erstellt wird (Handle wird zurückgegeben), dann muss sie ja schließlich auch irgendwo sein. Ansonsten bemüh doch mal die Suchfunktion. Wenn das alles nichts hilft, weiß ich es auch nicht.

Verfasst: 26.03.2008 15:00
von NicTheQuick
Die Datei wird wahrscheinlich im Compiler-Verzeichnis erstellt. Dort musst du
nach ihr suchen.

Verfasst: 26.03.2008 16:48
von AND51
Dann dürfte das mit GetCurrentDirectory() ans Tageslicht kommen.
Hatte auch mal einen Fall, bei dem ich mich wunderte, warum eine Datei nicht im Projektverzeichnis angelegt wurde. Erstellt wurde sie, aber wo?
Das hatte ich auch dann mit GetCurrentDirectory() rausgefunden.

Verfasst: 26.03.2008 18:28
von stalky13
Hi danke für eure antworten

also ich hab mal das arbeitsverzeichnis überprüft vor und nach dem aufruf von pathrequester ... offenbar wird das verzeichnis nach C:\WINDOWS\Temporary Internetfiles\ geändert ... :? warum auch immer... scheint aber nicht an dem patrequester von pb zu ligen weil es leider mit dem von ts-soft auch ned funzt ... trotzdem besten dank für deinen code, ist ein gutes beispiel für einen eigenen pathrequester der vorteil ist mann kann flags übermittel um z.B. nach computern oder druckern zu suchen :allright: die flags findet man hier

ich ändere jetzt ganz einfach nach jedem pathrequester das arbeitsverzeichnis mit setcurrentdirectory

thx für eure hilfe mfg stalky

Verfasst: 26.03.2008 18:34
von H.Brill
Also ich würde auf jeden Fall das PathRequester()
auch auswerten, z. B. so :
So funktioniert es jedenfalls bei mir.

Code: Alles auswählen

Pfad.s = PathRequester("Daten speichern in:", "C:\") 
If Pfad <> ""
   If CreateFile(0, Pfad + "test.txt") 
      WriteStringN(0,"Test") 
      CloseFile(0) 
      Debug "Datei erstellt" 
   Else 
      Debug "Fehler" 
   EndIf
Else
   Debug "Kein Pfad gewählt !"   
EndIf
End