Re: SHBrowseForFolder
- Posted by "Thomas Parslow (PatRat)" <patrat at rat-software.com> Sep 06, 2001
- 450 views
> I too have worked with this API and got bogged down when it came to > retrieving the full path from the ITEMIDLIST structure. Here's the code > up to where I left off (I was having trouble getting the length of the > first item in the list): Hi, I've modified your code so that it uses SHGetPathFromIDList to convert the result (tested and working): include win32lib.ew with trace atom binfo, result,memfolder sequence folder constant xSHBrowseForFolder = registerw32Function(shell32, "SHBrowseForFolder", {C_POINTER}, C_POINTER) constant xSHGetPathFromIDList = registerw32Function(shell32,"SHGetPathFromIDList",{C_ULONG,C_POINTER},C_ULONG) global constant bfOwner = allot( Long ), bfpidlRoot = allot( Long ), bfDisplayName = allot( Lpsz ), bfTitle = allot( Lpsz ), bfFlags = allot( Long ), bfFunction = allot( Long ), bfParam = allot( Long ), bfImage = allot( Long ), SIZEOF_BROWSEINFO = allotted_size() binfo = acquire_mem(0, SIZEOF_BROWSEINFO) store( binfo, bfOwner, 0) store( binfo, bfpidlRoot, NULL) store( binfo, bfDisplayName, "") store( binfo, bfTitle, "Select a Folder") store( binfo, bfFlags, NULL) store( binfo, bfFunction, NULL) store( binfo, bfParam, NULL) store( binfo, bfImage, NULL) result = w32Func(xSHBrowseForFolder, {binfo}) memfolder= allocate_string(repeat(512,0)) if w32Func(xSHGetPathFromIDList,{result,memfolder}) then --the string pointed to by folder now contains the path folder = peek_string(memfolder) else folder = "" end if free(memfolder) release_mem(binfo) if message_box("Folder: " & folder, "Test", MB_OK) then end if Thomas Parslow (PatRat) ICQ #:26359483 Rat Software http://www.rat-software.com/ Please leave quoted text in place when replying