COM C# shell 桌面
来源:互联网 发布:淘宝盗图怎么看投诉人 编辑:程序博客网 时间:2024/06/05 18:01
1.GetLogicalDriveStrings()得到各个盘符。2.GetDriveType()得到各个盘的类型。3.列出文件夹,文件,图标最简单的有两个办法。 (1)FindFirstFile() + FindNextFile() + FindClose()得到文件和文件夹 SHGetFileInfo()得到文件图标。 该法比较简单,但是不能做的象Explorer.exe完全一样。 (2)下面的方法比较繁琐,涉及到COM,但是不懂COM也没关系。而且这种办法 还可以实现1和2的功能。 SHGetDesktopFolder()得到桌面的IShellFolder接口loop: 调用IShellFolder::EnumObjects()得到IEnumIDList接口 用IEnumIDList接口列出所有内容,得到的是PIDL, 根据PIDL用IShellFolder::GetDisplayNameOf()得到桌面内的对象的名字, 根据PIDL用SHGetFileInfo()得到图标。 根据PIDL用IShellFolder::BindToObject()得到子对象的IShellFolder接口,重复loop,就可以得到所有的东东了。 是不是很麻烦,当时我的头都大了。不过这是正招,可以实现的和Explorer.exe一样。
VC6.0
LPITEMIDLIST pidl;LPMALLOC pShellMalloc;char szDir[200];if(SUCCEEDED(SHGetMalloc(&pShellMalloc))){if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pidl))) {// 如果成功返回trueSHGetPathFromIDList(pidl, szDir);pShellMalloc->Free(pidl);}pShellMalloc->Release();}::MessageBox (NULL,szDir,"Path",MB_OK);
C#:
Enum = (IEnumIDList)Marshal.GetObjectForIUnknown(EnumPtr); while (Enum.Next(1, out pidlSub, out celtFetched) == 0 && celtFetched == API.S_FALSE) { string name = API.GetNameByIShell(root, pidlSub); IShellFolder iSub; root.BindToObject(pidlSub, IntPtr.Zero, ref Guids.IID_IShellFolder, out iSub); TreeNode nodeSub = new TreeNode(name); nodeSub.Tag = iSub; nodeSub.Nodes.Add("..."); e.Node.Nodes.Add(nodeSub);
0 0
- COM C# shell 桌面
- C# 桌面截图代码
- C#桌面应用程序打包
- C# 桌面截图
- C#实现虚拟桌面
- C#桌面磁性窗体
- C#桌面歌词原理
- 桌面应用C#框架
- C#替换WIN7桌面
- C#创建桌面快捷方式
- c# 获取桌面路径
- C# 刷新win7桌面
- C# 桌面应用程序
- 获得桌面文件Shell编程
- 桌面IE打开提示找不到"INTEXPLORE.com"
- 桌面IE打开提示找不到“INTEXPLORE.COM
- ArcGIS桌面开发之—COM模式
- c# 杀死桌面进程 张宇轩
- 一步一步写算法(之函数堆栈显示)
- PL/SQL 快捷键及乱码
- hadoop 处理不同的输入文件,文件关联
- 关于 win7 NT kernel&system 占用大量CPU 问题
- 一步一步写算法(之prim算法 上)
- COM C# shell 桌面
- PHP基础之常用字符串函数
- parseInt 的注意事项
- 北邮新OJ99
- 一步一步写算法(之prim算法 中)
- 推送-生活中不可少的服务
- activiti5 form
- iBatis简单入门教程
- NDK:android调用c代码