Re: SHBrowseForFolder

new topic     » goto parent     » topic index » view thread      » older message » newer message

> 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

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu