Pathrequester unter Windows ME

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
stalky13
Beiträge: 28
Registriert: 11.12.2007 18:59
Wohnort: Jever

Pathrequester unter Windows ME

Beitrag 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?
Aus großer Kraft folgt große Verantwortung.
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

Beitrag 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
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
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Die Datei wird wahrscheinlich im Compiler-Verzeichnis erstellt. Dort musst du
nach ihr suchen.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
stalky13
Beiträge: 28
Registriert: 11.12.2007 18:59
Wohnort: Jever

Beitrag 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
Aus großer Kraft folgt große Verantwortung.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Beitrag 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
PB 6.10
Antworten