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:
IShellFolder::GetUIObjectOf
-> Explorer retrieves theIDataObject
copied data.IDataObject::GetData
-> data is represented by clipboard formats:FILEDESCRIPTOR, FILECONTENTS
FILECONTENTS
-> Explorer fromFILECONTENTS
format getsIStream
, from which you can read file dataIStream::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.