/// <summary>
 /// Obtain DataObject, Draggables and DropEffects, by calling AssignDataObject, QuerryDraggablesFromDataObject
 /// and QueryDropEffects() script commands.
 /// </summary>
 /// <param name="iSupportDropVariable"></param>
 /// <param name="destinationDataObjectVariable"></param>
 /// <param name="destinationVariable"></param>
 /// <param name="skipIfExists"></param>
 /// <param name="nextCommand"></param>
 /// <returns></returns>
 public static IScriptCommand QueryShellDragInfo(
     string iSupportDropVariable = "{ISupportDrop}", string destinationDataObjectVariable = "{DataObj}",
     string destinationVariable  = "{Draggables}", string queryDropResultVariable         = "{QueryDropResult}",
     bool skipIfExists           = false, IScriptCommand successCommand = null, IScriptCommand otherwiseCommand = null)
 {
     return(HubScriptCommands.AssignDataObject(destinationDataObjectVariable, false,
                                               HubScriptCommands.QueryDraggablesFromDataObject(iSupportDropVariable, destinationDataObjectVariable, destinationVariable, false,
                                                                                               //And if there's draggables,
                                                                                               ScriptCommands.IfAssigned("{DragDrop.Draggables}",
                                                                                                                         ScriptCommands.IfNotEquals("{DragDrop.Draggables.Count()}", 0,
                                                                                                                                                    //Call ISupportDrop.QueryDropEffects() to get QueryDropEffect.
                                                                                                                                                    HubScriptCommands.QueryDropEffects(iSupportDropVariable, destinationVariable, destinationDataObjectVariable, null,
                                                                                                                                                                                       queryDropResultVariable, false,
                                                                                                                                                                                       ScriptCommands.IfEquals(queryDropResultVariable, FileExplorer.Defines.QueryDropEffects.None,
                                                                                                                                                                                                               otherwiseCommand,
                                                                                                                                                                                                               successCommand)), otherwiseCommand), otherwiseCommand))));
 }
        public static IScriptCommand UpdateAdorner(string adornerVariable      = "{DragDrop.Adorner}",
                                                   string iSupportDropVariable = "{ISupportDrop}",
                                                   string dragMethodVariable   = "{DragDrop.DragMethod}",
                                                   string draggablesVariable   = "{DragDrop.Draggables}",
                                                   IScriptCommand nextCommand  = null)
        {
            string queryDropResultVariable = "{DragDrop.QueryDropResult}";

            return(DragDropScriptCommands.UpdateAdornerPointerPosition(adornerVariable,
                                                                       DragDropScriptCommands.UpdateAdornerDraggables(adornerVariable, draggablesVariable,
                                                                                                                      HubScriptCommands.QueryDropEffects(iSupportDropVariable, draggablesVariable, null, null, queryDropResultVariable, false,
                                                                                                                                                         DragDropScriptCommands.UpdateAdornerText(adornerVariable, dragMethodVariable, draggablesVariable,
                                                                                                                                                                                                  queryDropResultVariable, iSupportDropVariable, nextCommand)))));
        }