本文整理汇总了C#中IShellFolder类的典型用法代码示例。如果您正苦于以下问题:C# IShellFolder类的具体用法?C# IShellFolder怎么用?C# IShellFolder使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
IShellFolder类属于命名空间,在下文中一共展示了IShellFolder类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ShellNode
public ShellNode(ShellBrowser browser, IntPtr pidl, IntPtr shellFolderPtr)
{
this.Browser = browser;
this.shellFolderPtr = shellFolderPtr;
this.shellFolder = (IShellFolder)Marshal.GetTypedObjectForIUnknown(shellFolderPtr, typeof(IShellFolder));
this.SubFiles = new ShellItemCollection(this);
this.SubFolders = new ShellItemCollection(this);
PIDLRel = new Pidl(pidl, false);
Text = "Desktop";
Path = "Desktop";
SetAttributesDesktop(this);
ShFileInfo info = new ShFileInfo();
Shell32.SHGetFileInfo(PIDLRel.Ptr, 0, ref info, Marshal.SizeOf(info), SHGFI.Pidl | SHGFI.TypeName | SHGFI.SysIconIndex);
Type = info.TypeName;
ShellImageList.SetIconIndex(this, info.IconIndex, false);
ShellImageList.SetIconIndex(this, info.IconIndex, true);
SortFlag = 1;
}
示例2: FromShellFolder
public static ExtractIconWrapper FromShellFolder(IShellFolder folder, IntPtr pidl)
{
if (folder == null)
{
throw new ArgumentNullException("folder");
}
if (pidl == IntPtr.Zero)
{
throw new ArgumentException("pidl == IntPtr.Zero", "pidl");
}
try
{
object obj2;
IntPtr[] apidl = new IntPtr[] { pidl };
folder.GetUIObjectOf(IntPtr.Zero, 1, apidl, typeof(IExtractIconW).GUID, IntPtr.Zero, out obj2);
if (obj2 != null)
{
return new ExtractIconWrapper((IExtractIconW) obj2);
}
}
catch (FileNotFoundException)
{
}
return null;
}
示例3: ShellItem
internal ShellItem(ShellBrowser browser, IntPtr pidl, IntPtr shellFolderPtr)
{
this.browser = browser;
this.shellFolderPtr = shellFolderPtr;
this.shellFolder = (IShellFolder)Marshal.GetTypedObjectForIUnknown(shellFolderPtr, typeof(IShellFolder));
subFiles = new ShellItemCollection(this);
subFolders = new ShellItemCollection(this);
pidlRel = new PIDL(pidl, false);
text = "Desktop";
path = "Desktop";
SetAttributesDesktop(this);
ShellAPI.SHFILEINFO info = new ShellAPI.SHFILEINFO();
ShellAPI.SHGetFileInfo(pidlRel.Ptr, 0, ref info, ShellAPI.cbFileInfo,
ShellAPI.SHGFI.PIDL | ShellAPI.SHGFI.TYPENAME | ShellAPI.SHGFI.SYSICONINDEX);
type = info.szTypeName;
ShellImageList.SetIconIndex(this, info.iIcon, false);
ShellImageList.SetIconIndex(this, info.iIcon, true);
sortFlag = 1;
}
示例4: GetChilds
private static void GetChilds(IShellFolder desktop)
{
Console.WriteLine("===============GetChilds================");
//循环查找子项
Microsoft.WindowsAPICodePack.Shell.IEnumIDList Enum = null;
IEnumIDList EnumPtr;
IntPtr pidlSub;
uint celtFetched;
if (desktop.EnumObjects(IntPtr.Zero, ShellNativeMethods.ShellFolderEnumerationOptions.Folders | ShellNativeMethods.ShellFolderEnumerationOptions.IncludeHidden | ShellNativeMethods.ShellFolderEnumerationOptions.Storage, out EnumPtr) == CONST.S_OK)
{
while (EnumPtr.Next(1, out pidlSub, out celtFetched) == 0 && celtFetched == CONST.S_FALSE)
{
IntPtr strr;
desktop.GetDisplayNameOf(ref pidlSub, (uint)SHGNO.INFOLDER, out strr);
string name = Marshal.PtrToStringAuto(strr);
//SHFILEINFO info = new SHFILEINFO();
//Shell32.SHGetFileInfo(pidlSub, 0, ref info, Marshal.SizeOf(typeof(SHFILEINFO)), SHGFI.PIDL | SHGFI.DISPLAYNAME | SHGFI.ICONLOCATION);
//IShellFolder iSub;
//desktop.BindToObject(pidlSub, IntPtr.Zero, ref Guids.IID_IShellFolder, out iSub);
Console.WriteLine(name);
}
}
Console.WriteLine();
Console.WriteLine();
}
示例5: CreateShellView
internal override IShellView CreateShellView(IShellFolder folder)
{
// Setup create info for a new default folder view.
var createInfo = new SFV_CREATE
{
cbSize = (uint) Marshal.SizeOf(typeof (SFV_CREATE)),
pshf = folder,
psvOuter = null,
psfvcb = null
};
// TODO: IMPORTANT: This is the function that's failing now for creating the
// view, it seems that it could be due to not providing psvOuter (which may be
// required as we're not far off being a common dialog) or more likely because we
// are not providing the callback. Try both...
// NOTE: A quick test shows it's unlikely to be the psvOuter, try the CB.
// NOTE: adding the callback hasn't helped, we can try the alternative call
// which is shcreateshellfolderviewex
// NOTE: None of those suggestions worked.
IShellView view;
if (Shell32.SHCreateShellFolderView(ref createInfo, out view) != WinError.S_OK)
{
throw new Exception("An error occured creating the default folder view.");
}
return view;
}
示例6: ShellFolder
internal ShellFolder(IShellItem shellItem, IShellFolder shellFolder, ShellItemKnownInfo knownInfo)
: base(GetShellItemFromFolder(shellItem, shellFolder), knownInfo)
{
if (shellFolder == null)
{
shellFolder = (IShellFolder)shellItem.BindToHandler(null, ShellConsts.BHID_SFObject, typeof(IShellFolder).GUID);
}
NativeFolder = shellFolder;
}
示例7: GetShellItemFromFolder
private static IShellItem GetShellItemFromFolder(IShellItem shellItem, IShellFolder shellFolder)
{
if (shellItem == null && shellFolder == null)
throw new ArgumentNullException("shellItem, shellFolder", "shellItem and shellFolder cannot both be null");
if (shellItem != null)
return shellItem;
IdList pidl = SHGetIDListFromObject(shellFolder);
return SHCreateItemFromIDList<IShellItem>(pidl);
}
示例8: GetNameByIShell
/// <summary>
/// 获取显示名称
/// </summary>
public static string GetNameByIShell(IShellFolder Root, IntPtr pidlSub)
{
IntPtr strr = Marshal.AllocCoTaskMem(MAX_PATH * 2 + 4);
Marshal.WriteInt32(strr, 0, 0);
StringBuilder buf = new StringBuilder(MAX_PATH);
Root.GetDisplayNameOf(pidlSub, SHGNO.INFOLDER, strr);
Shlwapi.StrRetToBuf(strr, pidlSub, buf, MAX_PATH);
return buf.ToString();
}
示例9: ShellItem
internal ShellItem(ShellBrowser browser, ShellAPI.CSIDL specialFolder)
{
IntPtr pidl = IntPtr.Zero;
ShellAPI.SHGetSpecialFolderLocation(IntPtr.Zero, specialFolder, out pidl);
//
IntPtr shellFolderPtr;
this.browser = browser;
//
if (specialFolder == ShellAPI.CSIDL.DESKTOP)
{
ShellAPI.SHGetDesktopFolder(out shellFolderPtr);
//
this.shellFolderPtr = shellFolderPtr;
this.shellFolder = (IShellFolder)Marshal.GetTypedObjectForIUnknown(shellFolderPtr, typeof(IShellFolder));
}
else
{
this.shellFolder = GetShellFolderFromPidl(pidl, out shellFolderPtr);
//
this.parentItem = browser.DesktopItem;
}
//
subFiles = new ShellItemCollection(this);
subFolders = new ShellItemCollection(this);
pidlRel = new PIDL(pidl, false);
ShellAPI.SHFILEINFO info = new ShellAPI.SHFILEINFO();
ShellAPI.SHGetFileInfo(pidlRel.Ptr, 0, ref info, ShellAPI.cbFileInfo,
ShellAPI.SHGFI.PIDL | ShellAPI.SHGFI.TYPENAME | ShellAPI.SHGFI.SYSICONINDEX | ShellAPI.SHGFI.DISPLAYNAME);
type = info.szTypeName;
text = info.szDisplayName;
//
StringBuilder pathBuilder = new StringBuilder(ShellAPI.MAX_PATH);
ShellAPI.SHGetFolderPath(
IntPtr.Zero, specialFolder,
IntPtr.Zero, ShellAPI.SHGFP.TYPE_CURRENT, pathBuilder);
this.path = pathBuilder.ToString();
//
if (specialFolder == ShellAPI.CSIDL.DESKTOP)
{
ShellImageList.SetIconIndex(this, info.iIcon, false);
ShellImageList.SetIconIndex(this, info.iIcon, true);
//
SetAttributesDesktop(this);
}
else
{
SetAttributesFolder(this);
SetInfo(this);
}
sortFlag = 1;
}
示例10: ShellItem
public ShellItem(IShellFolder folder, IntPtr relativePidl)
{
if (folder == null)
{
throw new ArgumentNullException("folfer");
}
if (relativePidl == IntPtr.Zero)
{
throw new ArgumentException("relativePidl == IntPtr.Zero", "relativePidl");
}
this.FAbsolutePidl = GetAbsolutePidl(folder, relativePidl);
}
示例11: GetContextMenuInterfaces
private static bool GetContextMenuInterfaces(IShellFolder oParentFolder, IntPtr PIDLs, out IntPtr ctxMenuPtr)
{
var arrPidLs = new IntPtr[1];
arrPidLs[0] = PIDLs;
var nResult = oParentFolder.GetUIObjectOf(IntPtr.Zero, (uint) arrPidLs.Length, arrPidLs, ref _iidIContextMenu, IntPtr.Zero, out ctxMenuPtr);
if (SOk == nResult)
{
_oContextMenu = (IContextMenu) Marshal.GetTypedObjectForIUnknown(ctxMenuPtr, typeof (IContextMenu));
return true;
}
ctxMenuPtr = IntPtr.Zero;
_oContextMenu = null;
return false;
}
示例12: GetContextMenuInterfaces
/// <summary>Gets the interfaces to the context menu</summary>
/// <param name="oParentFolder">Parent folder</param>
/// <param name="arrPIDLs">PIDLs</param>
/// <returns>true if it got the interfaces, otherwise false</returns>
private bool GetContextMenuInterfaces(IShellFolder oParentFolder, IntPtr[] arrPIDLs, out IntPtr ctxMenuPtr)
{
int nResult = oParentFolder.GetUIObjectOf(
IntPtr.Zero,
(uint)arrPIDLs.Length,
arrPIDLs,
ref IID_IContextMenu,
IntPtr.Zero,
out ctxMenuPtr);
if (S_OK == nResult)
{
_oContextMenu = (IContextMenu)Marshal.GetTypedObjectForIUnknown(ctxMenuPtr, typeof(IContextMenu));
return true;
}
else
{
ctxMenuPtr = IntPtr.Zero;
_oContextMenu = null;
return false;
}
}
示例13: GetContextMenuInterfaces
/// <summary>Gets the interfaces to the context menu</summary>
/// <param name="oParentFolder">Parent folder</param>
/// <param name="arrPIDLs">PIDLs</param>
/// <returns>true if it got the interfaces, otherwise false</returns>
private bool GetContextMenuInterfaces(IShellFolder oParentFolder, IntPtr[] arrPIDLs)
{
IntPtr pUnknownContextMenu = IntPtr.Zero;
int nResult = oParentFolder.GetUIObjectOf(
IntPtr.Zero,
(uint)arrPIDLs.Length,
arrPIDLs,
ref IID_IContextMenu,
IntPtr.Zero,
out pUnknownContextMenu);
if (S_OK == nResult)
{
_oContextMenu = (IContextMenu)Marshal.GetTypedObjectForIUnknown(pUnknownContextMenu, typeof(IContextMenu));
IntPtr pUnknownContextMenu2 = IntPtr.Zero;
if (S_OK == Marshal.QueryInterface(pUnknownContextMenu, ref IID_IContextMenu2, out pUnknownContextMenu2))
{
_oContextMenu2 = (IContextMenu2)Marshal.GetTypedObjectForIUnknown(pUnknownContextMenu2, typeof(IContextMenu2));
}
IntPtr pUnknownContextMenu3 = IntPtr.Zero;
if (S_OK == Marshal.QueryInterface(pUnknownContextMenu, ref IID_IContextMenu3, out pUnknownContextMenu3))
{
_oContextMenu3 = (IContextMenu3)Marshal.GetTypedObjectForIUnknown(pUnknownContextMenu3, typeof(IContextMenu3));
}
return true;
}
else
{
return false;
}
}
示例14: CheckDisplayName
private static bool CheckDisplayName(IShellFolder shellFolder, IntPtr pIDLLast, Regex re) {
if(pIDLLast != IntPtr.Zero) {
STRRET strret;
uint uFlags = 0;
StringBuilder pszBuf = new StringBuilder(260);
if(shellFolder.GetDisplayNameOf(pIDLLast, uFlags, out strret) == 0) {
PInvoke.StrRetToBuf(ref strret, pIDLLast, pszBuf, pszBuf.Capacity);
}
if(pszBuf.Length > 0) {
return re.IsMatch(pszBuf.ToString());
}
}
return false;
}
示例15: GetDesktopFolder
/// <summary>
/// Gets the desktop folder
/// </summary>
/// <returns>IShellFolder for desktop folder</returns>
private IShellFolder GetDesktopFolder()
{
IntPtr pUnkownDesktopFolder = IntPtr.Zero;
if (null == _oDesktopFolder)
{
// Get desktop IShellFolder
int nResult = SHGetDesktopFolder(out pUnkownDesktopFolder);
if (S_OK != nResult)
{
throw new ShellContextMenuException("Failed to get the desktop shell folder");
}
_oDesktopFolder = (IShellFolder)Marshal.GetTypedObjectForIUnknown(pUnkownDesktopFolder, typeof(IShellFolder));
}
return _oDesktopFolder;
}