要求:利用Win32 API SHBrowseForFolder开启一个选择文件目录的对话框,预先定位到默认的目录,最后返回所选择的结果,如果没有进行选择(即单击“取消”结束选择)则返回空''。
代码如下:(以下两个函数定义需要在uses中引入两个单元ShlObj,Windows;)
function BrowseCallbackProc(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer stdcall;
begin
case uMsg of
BFFM_INITIALIZED: SendMessage(Wnd, BFFM_SETSELECTION, 1, lpData);
end;
Result := 0;
end;
function BrowsFolder(const Folder: string): string;
var
TitleName: string;
lpItemID: PItemIDList;
BrowseInfo: TBrowseInfo;
DisplayName: array[0..MAX_PATH] of char;
TempPath: array[0..MAX_PATH] of char;
begin
Result := Folder;
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
BrowseInfo.hwndOwner := GetActiveWindow;
BrowseInfo.pszDisplayName := @DisplayName;
TitleName := '请选择一个目录';
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
BrowseInfo.lpfn := BrowseCallbackProc;
BrowseInfo.lParam := Integer(PChar(Folder));
lpItemID := SHBrowseForFolder(BrowseInfo);
if Assigned(lpItemId) then
begin
SHGetPathFromIDList(lpItemID, TempPath);
GlobalFreePtr(lpItemID);
Result := string(TempPath);
end
else
Result:='';
end;
函数BrowsFolder是主体,传入参数即默认的目录,返回值即选择的结果。
BrowseCallbackProc是由SHBrowseForFolder执行时需要的回调(Call Back)函数。在这个函数中,截取了BFFM_INITIALIZED消息,在目录选择对话框初始化的时候,向对话框发送一个BFFM_SETSELECTION消息,选中默认的目录。
分享到:
相关推荐
C++ 用SHBrowseForFolder 选择目录时,定位到默认的目录,DEMO源代码
通过shell32.lib的SHBrowseForFolder功能选择目录。带有示例。编译时需要加上 shell32.lib。
C语言用SHBrowseForFolder弹出选择文件夹的对话框
调用浏览对话框SHBrowseForFolder不一样的打开对话框
使用SHBrowseForFolder打开浏览文件夹对话框时,如何让“确定”按钮的禁用状态随文件夹中是否有要找的文件的存在而改变
VC 利用SHBrowseForFolder,SHGetPathFromIDList函数选择路径。
平时安装软件或是使用程序中,经常遇到文件选择对话框和目录选择对话框。 在VC中打开文件选择对话框比较简单,使用CFileDialog就可以。 打开目录选择对话框就稍微麻烦一些。需要使用API函数SHBrowseForFolder来实现...
主要给大家介绍了关于C#如何使用SHBrowseForFolder导出中文文件夹的相关资料,文中通过示例代码介绍的非常详细,对大家的学习合作工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在我的一个项目编制过程中,需要用到一个可以指定初始目录的目录选择对话框,起初我找到了http://www.vckbase.com/bbs/prime/viewprime.asp?id=94 这篇文章,发现由于"bi.pidlRoot"的格式不了解,很难实现这样的功能,...
开发环境vc6.0 本程序演示将dll注入到explorer进程里 有什么不懂得可以加我qq 一起讨论 qq 453742103
此类使使用Shell函数SHBrowseForFolder更加容易
如果你开发过Windows NT系统上的网络软件,肯定碰到过让用户选择要求连接的或登陆的计算机或者域名的情况。这种情况下肯定用过外壳API函数,像SHGetSpecialFolderLocation 和 SHBrowseForFolder,并显示标准的资源...
在我的一个项目编制过程中,需要用到一个可以指定初始目录的目录选择对话框, 这篇文章,发现由于"bi.pidlRoot "的格式不了解,很难实现这样的功能,后来在一个日本网站上找到了一篇文章,有示例代码和相关说明(现在网址找...
MFC实现文件夹浏览选择(文件夹按修改...在浏览选择文件夹上,微软早已给出 SHBrowseForFolder 方法,但是此方法浏览的文件夹,没有按修改时间排序功能。本程序就对文件夹做了排序算法,使之可以按照想要的顺序来浏览。
支持浏览文件夹,目录的选取,自建目录。演示如何在窗口上使用SHBrowseForFolder函数打开文件选择框。是很好的学习材料
lpbi->lpszTitle="请选择要遍历的目录位置:"; lpbi->ulFlags=BIF_RETURNONLYFSDIRS|BIF_STATUSTEXT; lpbi->lpfn=NULL; //显示外壳文件夹以便用户选择 LPITEMIDLIST lpitemidlist=SHBrowseForFolder(lpbi);...
易语言拆并txt源码,拆并txt,选择目录,读取文件个数,获取总行数,批量文件窗口可视,批量文件窗口关闭,文件夹执行,批量文件执行,SHBrowseForFolder,SHGetPathFromIDList,GetInputState,SendMessageA
能够指定目录进行浏览和默认浏览 char filename[255]; BROWSEINFO info; info.hwndOwner = this->m_hWnd ; info.pidlRoot = (LPCITEMIDLIST)NULL; info.pszDisplayName = filename; info.lpszTitle = ...
易语言提取资源图片源码,提取资源图片,导出PNG,导出Bmp,取不重复目录,浏览文件夹_,SHBrowseForFolder,SHGetPathFromIDList,MessageBox
一、利用API实现打开文件对话框和利用MFC来实现打开文件对话框。 方法一:API部分: // OPENFILENAME ofn; // TCHAR szFile[MAX_PATH]; // ZeroMemory(&ofn,sizeof(ofn)); // ofn.lStructSize = sizeof(ofn); ...