本文整理汇总了C#中QTTabBarLib.IDLWrapper.ResolveTargetIfLink方法的典型用法代码示例。如果您正苦于以下问题:C# IDLWrapper.ResolveTargetIfLink方法的具体用法?C# IDLWrapper.ResolveTargetIfLink怎么用?C# IDLWrapper.ResolveTargetIfLink使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QTTabBarLib.IDLWrapper
的用法示例。
在下文中一共展示了IDLWrapper.ResolveTargetIfLink方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DoBindAction
//.........这里部分代码省略.........
break;
case BindAction.NewWindow:
using(IDLWrapper wrapper = new IDLWrapper(Config.Window.DefaultLocation)) {
OpenNewWindow(wrapper);
}
break;
// TODO all the blank ones
case BindAction.NewFolder:
break;
case BindAction.NewFile:
break;
case BindAction.SwitchToLastActivated:
if(lstActivatedTabs.Count > 1 && tabControl1.TabPages.Contains(lstActivatedTabs[lstActivatedTabs.Count - 2])) {
try {
tabControl1.SelectTab(lstActivatedTabs[lstActivatedTabs.Count - 2]);
}
catch(ArgumentException) {
}
}
break;
case BindAction.MergeWindows:
MergeAllWindows();
break;
case BindAction.ShowRecentFilesMenu:
break;
case BindAction.SortTabsByName:
break;
case BindAction.SortTabsByPath:
break;
case BindAction.SortTabsByActive:
break;
case BindAction.UpOneLevelTab:
case BindAction.UpOneLevel:
UpOneLevel(); // Hmm...
break;
case BindAction.Refresh:
break;
case BindAction.Paste:
break;
case BindAction.Maximize:
break;
case BindAction.Minimize:
break;
case BindAction.CopyTabPath:
string currentPath = tab.CurrentPath;
if(currentPath.IndexOf("???") != -1) {
currentPath = currentPath.Substring(0, currentPath.IndexOf("???"));
}
QTUtility2.SetStringClipboard(currentPath);
break;
case BindAction.TabProperties:
ShellMethods.ShowProperties(tab.CurrentIDL);
break;
case BindAction.ShowTabSubfolderMenu:
break;
case BindAction.ItemOpenInNewTab:
case BindAction.ItemOpenInNewTabNoSel:
case BindAction.ItemOpenInNewWindow:
if(item.Available && item.HasPath && item.IsReadyIfDrive && !item.IsLinkToDeadFolder) {
using(IDLWrapper linkWrapper = item.ResolveTargetIfLink()) {
IDLWrapper actualItem = linkWrapper ?? item;
if(actualItem.IsFolder) {
if(action == BindAction.ItemOpenInNewWindow) {
OpenNewWindow(actualItem);
}
else {
OpenNewTab(actualItem, action == BindAction.ItemOpenInNewTabNoSel);
}
}
}
}
break;
case BindAction.ItemCut:
case BindAction.ItemCopy:
case BindAction.ItemDelete:
break;
case BindAction.ItemProperties:
ShellMethods.ShowProperties(item.IDL);
break;
case BindAction.CopyItemPath:
case BindAction.CopyItemName:
case BindAction.ChecksumItem:
break;
}
return true;
}
示例2: OpenNewTab
internal bool OpenNewTab(IDLWrapper idlwGiven, bool blockSelecting = false, bool fForceNew = false)
{
// Check that the folder exists and is navigable.
if(idlwGiven == null || !idlwGiven.Available || !idlwGiven.HasPath || !idlwGiven.IsReadyIfDrive || idlwGiven.IsLinkToDeadFolder) {
SystemSounds.Hand.Play();
return false;
}
// If the IDL is a link, resolve it. Otherwise keep using the one we're given.
using(IDLWrapper idlwLink = idlwGiven.ResolveTargetIfLink()) {
IDLWrapper idlw = idlwLink ?? idlwGiven;
// Recheck a few things
if(!idlw.Available || !idlw.HasPath || !idlw.IsReadyIfDrive || !idlw.IsFolder) {
SystemSounds.Hand.Play();
return false;
}
if(blockSelecting) {
NowTabsAddingRemoving = true;
}
try {
// Check if it's already open
if(!fForceNew && Config.Tabs.NeverOpenSame) {
QTabItem tabPage = tabControl1.TabPages.FirstOrDefault(
item2 => item2.CurrentPath.PathEquals(idlw.Path));
if(tabPage != null) {
if(Config.Tabs.ActivateNewTab) {
tabControl1.SelectTab(tabPage);
}
TryCallButtonBar(bbar => bbar.RefreshButtons());
return false;
}
}
// TODO
// This entire block is a mystery to me, and I think it should be
// removed. It's gone in Quizo's version.
string path = idlw.Path;
if(!idlw.Special && !path.StartsWith("::")) {
string directoryName = Path.GetDirectoryName(path);
if(!string.IsNullOrEmpty(directoryName)) {
using(IDLWrapper wrapper = new IDLWrapper(directoryName)) {
if(wrapper.Special && idlw.Available) {
IShellFolder ppv = null;
try {
IntPtr ptr;
if(PInvoke.SHBindToParent(idlw.PIDL, ExplorerGUIDs.IID_IShellFolder, out ppv, out ptr) == 0) {
using(IDLWrapper wrapper2 = new IDLWrapper(PInvoke.ILCombine(wrapper.PIDL, ptr))) {
if(wrapper2.Available && wrapper2.HasPath) {
if(!blockSelecting && Config.Tabs.ActivateNewTab) {
NowTabCreated = true;
tabControl1.SelectTab(CreateNewTab(wrapper2));
}
else {
CreateNewTab(wrapper2);
TryCallButtonBar(bbar => bbar.RefreshButtons());
QTabItem.CheckSubTexts(tabControl1);
}
return true;
}
}
}
}
catch {
}
finally {
if(ppv != null) {
Marshal.ReleaseComObject(ppv);
}
}
}
}
}
}
// This should work for everything...
if(!blockSelecting && Config.Tabs.ActivateNewTab) {
NowTabCreated = true;
tabControl1.SelectTab(CreateNewTab(idlw));
}
else {
CreateNewTab(idlw);
TryCallButtonBar(bbar => bbar.RefreshButtons());
QTabItem.CheckSubTexts(tabControl1);
}
}
finally {
if(blockSelecting) {
NowTabsAddingRemoving = false;
}
}
}
return true;
}
示例3: OpenNewWindow
internal void OpenNewWindow(IDLWrapper idlwGiven)
{
// Check that the folder exists and is navigable.
if(idlwGiven == null || !idlwGiven.Available || !idlwGiven.HasPath || !idlwGiven.IsReadyIfDrive || idlwGiven.IsLinkToDeadFolder) {
SystemSounds.Hand.Play();
return;
}
// If the IDL is a link, resolve it. Otherwise keep using the one we're given.
using(IDLWrapper idlwLink = idlwGiven.ResolveTargetIfLink()) {
IDLWrapper idlw = idlwLink ?? idlwGiven;
// Recheck a few things
if(!idlw.Available || !idlw.HasPath || !idlw.IsReadyIfDrive || !idlw.IsFolder) {
SystemSounds.Hand.Play();
return;
}
bool isFolderTreeVisible = ShellBrowser.IsFolderTreeVisible();
bool fSameAsCurrent;
using(IDLWrapper wrapper = ShellBrowser.GetShellPath()) {
fSameAsCurrent = (wrapper == idlw);
}
// There's some weird magic going on here, but it's apparently necessary.
// TODO: understand it
SBSP wFlags = SBSP.NEWBROWSER;
if(fSameAsCurrent) {
if(isFolderTreeVisible) {
if(CheckProcessID(ExplorerHandle, WindowUtils.GetShellTrayWnd()) || WindowUtils.IsExplorerProcessSeparated()) {
PInvoke.SetRedraw(ExplorerHandle, false);
ShowFolderTree(false);
wFlags |= SBSP.EXPLOREMODE;
new WaitTimeoutCallback(WaitTimeout).BeginInvoke(200, AsyncComplete_FolderTree, true);
}
else {
QTUtility.fRestoreFolderTree = true;
}
}
else {
if(QTUtility.IsXP) {
QTUtility.RestoreFolderTree_Hide = true;
}
wFlags |= SBSP.EXPLOREMODE;
}
}
else if(isFolderTreeVisible) {
QTUtility.fRestoreFolderTree = true;
}
StaticReg.SkipNextCapture = true;
if(ShellBrowser.Navigate(idlw, wFlags) != 0) {
QTUtility2.MakeErrorLog(null, string.Format("Failed navigation: {0}", idlw.Path));
MessageBox.Show(string.Format(QTUtility.TextResourcesDic["TabBar_Message"][0], idlw.Path));
StaticReg.CreateWindowGroup = string.Empty;
StaticReg.SkipNextCapture = false;
}
QTUtility.fRestoreFolderTree = false;
}
}