PathRequesterEx (windows only)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
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

PathRequesterEx (windows only)

Beitrag von ts-soft »

Ich hoffe mal, der Code existiert hier noch nicht :D (hab es jedenfalls nicht gefunden)

Code: Alles auswählen

; PathRequesterEx
; Windows Only
; PB 4.40 and above
; Author: Thomas <ts-soft> Schulz
; CoAuthor: Stephen <srod> Rodriguez
; Version 1.1, 24.04.2010
;
; The first and second parameter the same as in PB
;
; you can use a CSIDL-Constant (optional), InitialPath will be ignored!
; CSIDL-Constants see: http://msdn.microsoft.com/de-de/library/bb979138.aspx
;
; for Flags see http://msdn.microsoft.com/en-us/library/bb773205%28VS.85%29.aspx
;
; No directory can be chosen above the initial directory!

EnableExplicit

Procedure.s PathRequesterEx(Title.s, InitialPath.s = "", CSIDL = #PB_Default, Flags = 0)
  Protected.ITEMIDLIST *ppidl
  Protected.BROWSEINFO Dir
  Protected result
  Protected.s folder = Space(#MAX_PATH)
  Protected *Path, t1$

  CoInitialize_(#Null)

  If CSIDL = #PB_Default
    *Path =  AllocateMemory(StringByteLength(InitialPath, #PB_Unicode) + 2)
    PokeS(*Path, InitialPath, -1, #PB_Unicode)
    *ppidl = ILCreateFromPath_(*Path)
    FreeMemory(*Path)
  Else
    SHGetSpecialFolderLocation_(GetActiveWindow_(), CSIDL, @*ppidl)
  EndIf

  With Dir
    \hwndOwner = GetActiveWindow_()
    \pidlRoot = *ppidl
    \pszDisplayName = @folder
    \lpszTitle = @Title
    \ulFlags = Flags
  EndWith

  result = SHBrowseForFolder_(@dir)
  If result And Dir\pszDisplayName
    t1$ = Folder
    SHGetPathFromIDList_(result, @Folder)
    If Folder = ""
      Folder = t1$
    EndIf
    CoTaskMemFree_(result)
  EndIf
  CoTaskMemFree_(*ppidl)
  CoUninitialize_()

  If Folder
    If FileSize(Folder) = -2
      If Right(Folder, 1) <> "\" : Folder + "\" : EndIf
    EndIf
  EndIf

  ProcedureReturn Folder
EndProcedure

; Example:
Debug PathRequesterEx("Select savedir:", "", #CSIDL_PERSONAL)
Debug PathRequesterEx("Select PureBasic Source:",  #PB_Compiler_Home +  "Examples\Sources\",  #PB_Default, #BIF_BROWSEINCLUDEFILES) 
Debug PathRequesterEx("Select Printer:", "", #CSIDL_PRINTERS, #BIF_BROWSEFORPRINTER | #BIF_NEWDIALOGSTYLE | #BIF_NONEWFOLDERBUTTON)

Falls jemand Fehler findet, bitte melden!

Hab mit ASCII, Unicode, x86 und x64 getestet.

Gruß

Thomas
Zuletzt geändert von ts-soft am 24.04.2010 13:44, insgesamt 2-mal geändert.
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
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: PathRequesterEx (windows only)

Beitrag von Andesdaf »

interessant, bei mir funktioniert alles :allright:
Win11 x64 | PB 6.20
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PathRequesterEx (windows only)

Beitrag von RSBasic »

Cool, ein sehr schöner Code, sehr interessant für meine WinAPI Library :mrgreen:
Danke fürs Teilen :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
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: PathRequesterEx (windows only)

Beitrag von ts-soft »

Schon wieder 2 glücklich gemacht :wink:

Code klein wenig angepaßt, damit auch Dateien korrekt zurückgegeben werden.
Beispiel:

Code: Alles auswählen

Debug PathRequesterEx("Wähle PureBasic Source:", #PB_Compiler_Home + "Examples\Sources\", #PB_Default, #BIF_BROWSEINCLUDEFILES)
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
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: PathRequesterEx (windows only)

Beitrag von ts-soft »

Update:
Jetzt funktionierts auch mit Druckern!
Danke an srod :D
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
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Re: PathRequesterEx (windows only)

Beitrag von al90 »

Schöne Erweiterung. Wird man bestimmt noch gut gebrauchen können. :allright:
Antworten