本文整理汇总了C#中ShellDll.ShellItem类的典型用法代码示例。如果您正苦于以下问题:C# ShellItem类的具体用法?C# ShellItem怎么用?C# ShellItem使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ShellItem类属于ShellDll命名空间,在下文中一共展示了ShellItem类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ShellStreamReader
internal ShellStreamReader(ShellItem shellItem, IStorage parentStorage, FileAccess access)
{
this.shellItem = shellItem;
OpenStream(parentStorage, ref access);
this.canRead = (access == FileAccess.Read || access == FileAccess.ReadWrite);
this.canWrite = (access == FileAccess.Write || access == FileAccess.ReadWrite);
currentPos = 0;
}
示例2: InitVars
private void InitVars()
{
IntPtr tempPidl;
ShellAPI.SHFILEINFO info;
//My Computer
info = new ShellAPI.SHFILEINFO();
tempPidl = IntPtr.Zero;
ShellAPI.SHGetSpecialFolderLocation(IntPtr.Zero, ShellAPI.CSIDL.DRIVES, out tempPidl);
ShellAPI.SHGetFileInfo(tempPidl, 0, ref info, ShellAPI.cbFileInfo,
ShellAPI.SHGFI.PIDL | ShellAPI.SHGFI.DISPLAYNAME | ShellAPI.SHGFI.TYPENAME);
sysfolderName = info.szTypeName;
mycompName = info.szDisplayName;
Marshal.FreeCoTaskMem(tempPidl);
//
//Dekstop
tempPidl = IntPtr.Zero;
ShellAPI.SHGetSpecialFolderLocation(IntPtr.Zero, ShellAPI.CSIDL.DESKTOP, out tempPidl);
IntPtr desktopFolderPtr;
ShellAPI.SHGetDesktopFolder(out desktopFolderPtr);
desktopItem = new ShellItem(this, tempPidl, desktopFolderPtr);
//
//My Documents
uint pchEaten = 0;
ShellAPI.SFGAO pdwAttributes = 0;
desktopItem.ShellFolder.ParseDisplayName(
IntPtr.Zero,
IntPtr.Zero,
SpecialFolderPath.MyDocuments,
ref pchEaten,
out tempPidl,
ref pdwAttributes);
info = new ShellAPI.SHFILEINFO();
ShellAPI.SHGetFileInfo(tempPidl, 0, ref info, ShellAPI.cbFileInfo,
ShellAPI.SHGFI.PIDL | ShellAPI.SHGFI.DISPLAYNAME);
mydocsName = info.szDisplayName;
Marshal.FreeCoTaskMem(tempPidl);
StringBuilder path = new StringBuilder(ShellAPI.MAX_PATH);
ShellAPI.SHGetFolderPath(
IntPtr.Zero, ShellAPI.CSIDL.PERSONAL,
IntPtr.Zero, ShellAPI.SHGFP.TYPE_CURRENT, path);
mydocsPath = path.ToString();
//
}
示例3: ShellItem
internal ShellItem(ShellBrowser browser, ShellItem parentItem, IntPtr pidl)
{
this.browser = browser;
this.parentItem = parentItem;
pidlRel = new PIDL(pidl, false);
SetText(this);
SetPath(this);
SetAttributesFile(this);
SetInfo(this);
sortFlag = MakeSortFlag(this);
}
示例4: ShellItem
public ShellItem(ShellBrowser browser, ShellItem parentItem, IntPtr pidl)
{
this.Browser = browser;
this.ParentItem = parentItem;
PIDLRel = new PIDL(pidl, false);
SetText(this);
SetPath(this);
SetAttributesFile(this);
SetInfo(this);
SortFlag = MakeSortFlag(this);
}
示例5: GetListItem
public bool GetListItem(ShellItem shellItem, out ListViewItem listItem)
{
listItem = null;
foreach (ListViewItem item in Items)
{
if (shellItem.Equals(item.Tag))
{
listItem = item;
return true;
}
}
return false;
}
示例6: GetIStorage
public static bool GetIStorage(ShellItem item, out IntPtr storagePtr, out IStorage storage)
{
if (item.ParentItem.ShellFolder.BindToStorage(
item.PIDLRel.Ptr,
IntPtr.Zero,
ref ShellAPI.IID_IStorage,
out storagePtr) == ShellAPI.S_OK)
{
storage = (IStorage)Marshal.GetTypedObjectForIUnknown(storagePtr, typeof(IStorage));
return true;
}
else
{
storage = null;
storagePtr = IntPtr.Zero;
return false;
}
}
示例7: GetIDataObject
/// <summary>
/// This method will use the GetUIObjectOf method of IShellFolder to obtain the IDataObject of a
/// ShellItem.
/// </summary>
/// <param name="item">The item for which to obtain the IDataObject</param>
/// <param name="dataObjectPtr">A pointer to the returned IDataObject</param>
/// <returns>the IDataObject the ShellItem</returns>
public static IntPtr GetIDataObject(ShellItem[] items)
{
ShellItem parent = items[0].ParentItem != null ? items[0].ParentItem : items[0];
IntPtr[] pidls = new IntPtr[items.Length];
for (int i = 0; i < items.Length; i++)
pidls[i] = items[i].PIDLRel.Ptr;
IntPtr dataObjectPtr;
if (parent.ShellFolder.GetUIObjectOf(
IntPtr.Zero,
(uint)pidls.Length,
pidls,
ref ShellAPI.IID_IDataObject,
IntPtr.Zero,
out dataObjectPtr) == ShellAPI.S_OK)
{
return dataObjectPtr;
}
else
{
return IntPtr.Zero;
}
}
示例8: GetTreeNode
public bool GetTreeNode(ShellItem shellItem, out TreeNode treeNode)
{
ArrayList pathList = new ArrayList();
while (shellItem.ParentItem != null)
{
pathList.Add(shellItem);
shellItem = shellItem.ParentItem;
}
pathList.Add(shellItem);
pathList.Reverse();
treeNode = Nodes[0];
for (int i = 1; i < pathList.Count; i++)
{
bool found = false;
foreach (TreeNode node in treeNode.Nodes)
{
if (node.Tag != null && node.Tag.Equals(pathList[i]))
{
treeNode = node;
found = true;
break;
}
}
if (!found)
{
treeNode = null;
return false;
}
}
return true;
}
示例9: DragOver
public int DragOver(ShellAPI.MK grfKeyState, ShellAPI.POINT pt, ref DragDropEffects pdwEffect)
{
bool reset = false;
#region Get DropItem
Point point = br.FolderView.PointToClient(new Point(pt.x, pt.y));
TreeViewHitTestInfo hitTest = br.FolderView.HitTest(point);
if(!TreeNode.Equals(dropNode, hitTest.Node))
{
if(dropTarget != null)
dropTarget.DragLeave();
ReleaseCom();
dropNode = hitTest.Node;
br.FolderView.SelectedNode = dropNode;
if(dropNode == null)
{
pdwEffect = DragDropEffects.None;
if(dropHelper != null)
dropHelper.DragOver(ref pt, pdwEffect);
return ShellAPI.S_OK;
}
else
{
ShellItem item = (ShellItem)dropNode.Tag;
parentDropItem = item;
ShellHelper.GetIDropTarget(item, out dropTargetPtr, out dropTarget);
reset = true;
}
}
else if(dropNode == null)
{
if(dropTarget != null)
dropTarget.DragLeave();
ReleaseCom();
dropNode = null;
br.SelectedNode = null;
pdwEffect = DragDropEffects.None;
if(dropHelper != null)
dropHelper.DragOver(ref pt, pdwEffect);
return ShellAPI.S_OK;
}
#endregion
if(dropTarget != null)
{
if(reset)
dropTarget.DragEnter(dropDataObject, grfKeyState, pt, ref pdwEffect);
else
dropTarget.DragOver(grfKeyState, pt, ref pdwEffect);
}
else
pdwEffect = DragDropEffects.None;
if(dropHelper != null)
dropHelper.DragOver(ref pt, pdwEffect);
return ShellAPI.S_OK;
}
示例10: SetIconIndex
internal static void SetIconIndex(ShellItem item, int index, bool SelectedIcon)
{
bool HasOverlay = false; //true if it's an overlay
int rVal = 0; //The returned Index
ShellAPI.SHGFI dwflag = ShellAPI.SHGFI.SYSICONINDEX | ShellAPI.SHGFI.PIDL | ShellAPI.SHGFI.ICON;
ShellAPI.FILE_ATTRIBUTE dwAttr = 0;
//build Key into HashTable for this Item
int Key = index * 256;
if (item.IsLink)
{
Key = Key | 1;
dwflag = dwflag | ShellAPI.SHGFI.LINKOVERLAY;
HasOverlay = true;
}
if (item.IsShared)
{
Key = Key | 2;
dwflag = dwflag | ShellAPI.SHGFI.ADDOVERLAYS;
HasOverlay = true;
}
if (SelectedIcon)
{
Key = Key | 4;
dwflag = dwflag | ShellAPI.SHGFI.OPENICON;
HasOverlay = true; //not really an overlay, but handled the same
}
if (imageTable.ContainsKey(Key))
{
rVal = (int)imageTable[Key];
}
else if (!HasOverlay && !item.IsHidden) //for non-overlay icons, we already have
{
rVal = (int)System.Math.Floor((double)Key / 256); // the right index -- put in table
imageTable[Key] = rVal;
}
else //don't have iconindex for an overlay, get it.
{
if (item.IsFileSystem & !item.IsDisk & !item.IsFolder)
{
dwflag = dwflag | ShellAPI.SHGFI.USEFILEATTRIBUTES;
dwAttr = dwAttr | ShellAPI.FILE_ATTRIBUTE.NORMAL;
}
PIDL pidlFull = item.PIDLFull;
ShellAPI.SHFILEINFO shfiSmall = new ShellAPI.SHFILEINFO();
ShellAPI.SHGetFileInfo(pidlFull.Ptr, dwAttr, ref shfiSmall, ShellAPI.cbFileInfo, dwflag | ShellAPI.SHGFI.SMALLICON);
ShellAPI.SHFILEINFO shfiLarge = new ShellAPI.SHFILEINFO();
ShellAPI.SHGetFileInfo(pidlFull.Ptr, dwAttr, ref shfiLarge, ShellAPI.cbFileInfo, dwflag | ShellAPI.SHGFI.LARGEICON);
Marshal.FreeCoTaskMem(pidlFull.Ptr);
lock (imageTable)
{
rVal = ShellAPI.ImageList_ReplaceIcon(smallImageListHandle, -1, shfiSmall.hIcon);
ShellAPI.ImageList_ReplaceIcon(largeImageListHandle, -1, shfiLarge.hIcon);
}
ShellAPI.DestroyIcon(shfiSmall.hIcon);
ShellAPI.DestroyIcon(shfiLarge.hIcon);
imageTable[Key] = rVal;
}
if (SelectedIcon)
item.SelectedImageIndex = rVal;
else
item.ImageIndex = rVal;
}
示例11: ShellItemUpdateEventArgs
public ShellItemUpdateEventArgs(
ShellItem oldItem,
ShellItem newItem,
ShellItemUpdateType type)
{
this.oldItem = oldItem;
this.newItem = newItem;
this.type = type;
}
示例12: CanDropClipboard
public static DragDropEffects CanDropClipboard(ShellItem item)
{
IntPtr dataObject;
ShellAPI.OleGetClipboard(out dataObject);
IntPtr targetPtr;
ShellDll.IDropTarget target;
DragDropEffects retVal = DragDropEffects.None;
if (GetIDropTarget(item, out targetPtr, out target))
{
#region Check Copy
DragDropEffects effects = DragDropEffects.Copy;
if (target.DragEnter(
dataObject,
ShellAPI.MK.CONTROL,
new ShellAPI.POINT(0, 0),
ref effects) == ShellAPI.S_OK)
{
if (effects == DragDropEffects.Copy)
retVal |= DragDropEffects.Copy;
target.DragLeave();
}
#endregion
#region Check Move
effects = DragDropEffects.Move;
if (target.DragEnter(
dataObject,
ShellAPI.MK.SHIFT,
new ShellAPI.POINT(0, 0),
ref effects) == ShellAPI.S_OK)
{
if (effects == DragDropEffects.Move)
retVal |= DragDropEffects.Move;
target.DragLeave();
}
#endregion
#region Check Lick
effects = DragDropEffects.Link;
if (target.DragEnter(
dataObject,
ShellAPI.MK.ALT,
new ShellAPI.POINT(0, 0),
ref effects) == ShellAPI.S_OK)
{
if (effects == DragDropEffects.Link)
retVal |= DragDropEffects.Link;
target.DragLeave();
}
#endregion
Marshal.ReleaseComObject(target);
Marshal.Release(targetPtr);
}
return retVal;
}
示例13: InvokeCommand
/// <summary>
/// Invokes a specific command for a set of pidls
/// </summary>
/// <param name="parent">the parent ShellItem which contains the pidls</param>
/// <param name="pidls">the pidls from the items for which to invoke</param>
/// <param name="cmd">the execute string from the command to invoke</param>
/// <param name="ptInvoke">the point (in screen coördinates) from which to invoke</param>
public static void InvokeCommand(ShellItem parent, IntPtr[] pidls, string cmd, Point ptInvoke)
{
IntPtr icontextMenuPtr;
IContextMenu iContextMenu;
if (GetIContextMenu(parent.ShellFolder, pidls, out icontextMenuPtr, out iContextMenu))
{
try
{
InvokeCommand(
iContextMenu,
cmd,
ShellItem.GetRealPath(parent),
ptInvoke);
}
catch (Exception) { }
finally
{
if (iContextMenu != null)
Marshal.ReleaseComObject(iContextMenu);
if (icontextMenuPtr != IntPtr.Zero)
Marshal.Release(icontextMenuPtr);
}
}
}
示例14: DragOver
public int DragOver(ShellAPI.MK grfKeyState, ShellAPI.POINT pt, ref DragDropEffects pdwEffect)
{
bool reset = false;
#region Get DropItem
Point point = br.FileView.PointToClient(new Point(pt.x, pt.y));
ListViewHitTestInfo hitTest = br.FileView.HitTest(point);
if (hitTest.Item != null &&
(br.FileView.View != View.Details || hitTest.SubItem == null || hitTest.Item.Name == hitTest.SubItem.Name) &&
(hitTest.Location == ListViewHitTestLocations.Image ||
hitTest.Location == ListViewHitTestLocations.Label ||
hitTest.Location == ListViewHitTestLocations.StateImage))
{
if (!hitTest.Item.Equals(dropListItem))
{
if (dropTarget != null)
dropTarget.DragLeave();
ReleaseCom();
if (dropListItem != null)
dropListItem.Selected = wasSelected;
dropListItem = hitTest.Item;
wasSelected = dropListItem.Selected;
dropListItem.Selected = true;
ShellItem item = (ShellItem)dropListItem.Tag;
parentDropItem = item;
ShellHelper.GetIDropTarget(item, out dropTargetPtr, out dropTarget);
reset = true;
}
}
else
{
if (dropListItem != null)
{
if (dropTarget != null)
dropTarget.DragLeave();
ReleaseCom();
dropListItem.Selected = wasSelected;
dropListItem = null;
parentDropItem = br.SelectedItem;
ShellHelper.GetIDropTarget(br.SelectedItem, out dropTargetPtr, out dropTarget);
reset = true;
}
}
#endregion
if (dropTarget != null)
{
if (reset)
dropTarget.DragEnter(dropDataObject, grfKeyState, pt, ref pdwEffect);
else
dropTarget.DragOver(grfKeyState, pt, ref pdwEffect);
}
else
pdwEffect = DragDropEffects.None;
if (dropHelper != null)
dropHelper.DragOver(ref pt, pdwEffect);
return ShellAPI.S_OK;
}
示例15: GetNewContextMenu
public static bool GetNewContextMenu(ShellItem item, out IntPtr iContextMenuPtr, out IContextMenu iContextMenu)
{
if (ShellAPI.CoCreateInstance(
ref ShellAPI.CLSID_NewMenu,
IntPtr.Zero,
ShellAPI.CLSCTX.INPROC_SERVER,
ref ShellAPI.IID_IContextMenu,
out iContextMenuPtr) == ShellAPI.S_OK)
{
iContextMenu = Marshal.GetTypedObjectForIUnknown(iContextMenuPtr, typeof(IContextMenu)) as IContextMenu;
IntPtr iShellExtInitPtr;
if (Marshal.QueryInterface(
iContextMenuPtr,
ref ShellAPI.IID_IShellExtInit,
out iShellExtInitPtr) == ShellAPI.S_OK)
{
IShellExtInit iShellExtInit = Marshal.GetTypedObjectForIUnknown(
iShellExtInitPtr, typeof(IShellExtInit)) as IShellExtInit;
PIDL pidlFull = item.PIDLFull;
iShellExtInit.Initialize(pidlFull.Ptr, IntPtr.Zero, 0);
Marshal.ReleaseComObject(iShellExtInit);
Marshal.Release(iShellExtInitPtr);
pidlFull.Free();
return true;
}
else
{
if (iContextMenu != null)
{
Marshal.ReleaseComObject(iContextMenu);
iContextMenu = null;
}
if (iContextMenuPtr != IntPtr.Zero)
{
Marshal.Release(iContextMenuPtr);
iContextMenuPtr = IntPtr.Zero;
}
return false;
}
}
else
{
iContextMenuPtr = IntPtr.Zero;
iContextMenu = null;
return false;
}
}