While copying files, Explorer displays the standard copy window. It is implemented in a standard component that has a CLSID_ProgressDialog and an IProgressDialog interface. Starting from Windows Vista, a new standard copy dialog has appeared, which is supported by the same component but has a different interface: IOperationsProgressDialog . When creating a component, the copy dialog will look like depending on which interface it was created with: IProgressDialog — the “old” dialog, IOperationsProgressDialog — the new dialog.

I developed a namespace extension for Windows 7. If you "pull" files from it into Windows Explorer, the following sequence of actions is performed:

  1. IShellFolder::GetUIObjectOf -> Explorer retrieves the IDataObject copied data.
  2. IDataObject::GetData -> data is represented by clipboard formats: FILEDESCRIPTOR, FILECONTENTS
  3. FILECONTENTS -> Explorer from FILECONTENTS format gets IStream , from which you can read file data
  4. IStream::Read -> direct read.

In the FILEDESCRIPTOR structure, FILEDESCRIPTOR can specify what to show the copy dialog ( FD_PROGRESSUI ). The dialogue is shown, but it is an "old" dialogue. How to make it "new" is not clear. I (NSE) do not draw it, do not create, do not manage the copying process. How can the conductor make it clear that you need to use the "new" dialogue? And then when copying from Explorer to Explorer, the copy dialog is "new", and when copying from my NSE to the conductor - the "old" one.

    0