SHBrowseForFolder
- Posted by Jonas Temple <jktemple at yhti.net> Sep 05, 2001
- 467 views
Derek Parnell wrote: > I don't remember getting this. Anyhow, there is a Windows API function > all > "SHBrowseForFolder". It looks a bit complicated to use so I'll do some > experiments with it first. Feel free to do some research of your own > though. Derek, 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): include win32lib.ew with trace atom xSHBrowseForFolder, binfo, result, rtn_code, cb1, cb2 sequence folder, folder_path xSHBrowseForFolder = registerw32Function(shell32, "SHBrowseForFolder", {C_POINTER}, C_POINTER) 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}) folder = fetch( binfo, bfDisplayName ) trace(1) cb1 = peek(result) cb2 = peek(result) folder_path = peek({result+2,cb1-2}) rtn_code = message_box("Folder: " & folder_path, "Test", MB_OK) release_mem(binfo) With this code the dialog does appear and you can select a folder but I can't seem to figure out how to get the path from "result". I will keep plugging away and maybe between the two of us we can figure it out. I have some places where I would also like to select a folder. Jonas