/// <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))));
 }