上一篇:向广大C#爱好者推荐一个很好使的MAIL CLASS >>
[C#] 如何选择一个目录
private enum BrowseFlag
{
BIF_RETURNONLYFSDIRS = 0x0001, // For finding a folder to start document searching
BIF_DONTGOBELOWDOMAIN = 0x0002, // For starting the Find Computer
BIF_STATUSTEXT = 0x0004,
BIF_RETURNFSANCESTORS = 0x0008,
BIF_EDITBOX = 0x0010,
BIF_VALIDATE = 0x0020, // insist on valid result (or CANCEL)
BIF_BROWSEFORCOMPUTER = 0x1000, // Browsing for Computers.
BIF_BROWSEFORPRINTER = 0x2000, // Browsing for Printers
BIF_BROWSEINCLUDEFILES= 0x4000 // Browsing for Everything
}
[StructLayout(LayoutKind.Sequential)]
private struct BrowseInfo
{
public IntPtr hwndOwner;
public IntPtr pidlRoot;
[MarshalAs(UnmanagedType.LPTStr)]
public string displayname;
[MarshalAs(UnmanagedType.LPTStr)]
public string title;
public int flags;
public IntPtr callback;
public IntPtr lparam;
}
[DllImport("shell32.dll", CharSet=CharSet.Auto)]
static extern IntPtr SHBrowseForFolder(ref BrowseInfo info);
[DllImport("shell32.dll", CharSet=CharSet.Auto)]
[return : MarshalAs(UnmanagedType.Bool)]
internal extern static bool SHGetPathFromIDList(IntPtr pidl, [MarshalAs(UnmanagedType.LPTStr)] System.Text.StringBuilder pszPath);
public static string BrowseFolder(IWin32Window owner)
{
BrowseInfo info = new BrowseInfo();
info.flags = (int)BrowseFlag.BIF_RETURNONLYFSDIRS
+ (int)BrowseFlag.BIF_STATUSTEXT
+ (int)BrowseFlag.BIF_VALIDATE;
info.hwndOwner = owner.Handle;
IntPtr pidlReturned = SHBrowseForFolder(ref info);
StringBuilder sb = new StringBuilder(260);
SHGetPathFromIDList(pidlReturned, sb);
return sb.ToString();
}
这绝对是最简便的解决办法。虽然没有释放pidlReturned有可能造成少量内存泄漏,但是那么一点内存,谁在乎呢?
下一篇:特洛伊木马服务器源代码(C#) >>
相关文章:
- · 我对C#中事件委托的通俗看法
- · C++程序员容易犯的十个C#错误
- · C#中使用Oracle 存储过程笔记
- · C# - Oracle数据库连接方法
- · C#下实现ping功能
- · c#.net常用函数和方法集
- · Delete yourself(C#)
- · c#中用axWebBrowser中提交表单,或点击某个对象
- · 如何获得 WINDOWS 版本[C# 版]
- · C#中SQL语句参数写法
- · c# singleton 的改进
- · C#开发WAP程序
- · C# 编码规范和编程好习惯
- · MD5算法之C#程序 MD5算法描述
- · C#处理鼠标和键盘事件
- · MD5算法之C#程序 MD5算法描述
- · 如何用C#将数据库中的记录制成XML
- · 创建CLR自定义触发器-C#
- · 获得汉字字符串拼音首字母 C#版
- · C#之消息队列的简要说明----自学笔记
- · C#实现的根据年月日计算星期几的函数
- · 文件改名的C#实现
- · C#中结构或类的嵌套 的方法
- · 深入剖析C#继承机制7
- · 深入剖析C#继承机制6
- · 深入剖析C#继承机制4
- · 深入剖析C#继承机制5
- · 深入剖析C#继承机制3
- · 深入剖析C#继承机制2
- · 深入剖析C#继承机制1
- · 怎样通过Visual C#.net创建一个DTS任务
- · 在C#桌面应用使用多语言
- · C#中对注册表的操作
- · C#时间函数扩展
- · 用C#读写ini文件
- · 用C#下的Raw Socket编程实现网络封包监视
- · 使用C#编写一个计时器
- · 【C#】输入汉字字符串索引拼音的首字母
