Создайте копию файла с помощью supercopier, ultracopier или teracopy (копир установлен по умолчанию) с помощью кода C #
Мне нужно направить информацию о копии файла таким образом, чтобы сработал установленный по умолчанию копировальный аппарат. Я сделал это с помощью функции SHFileOperation из оболочки Windows API и он работал для меня, но только с Windows принтером, а не с supercopier или любого другого установленного копира.
Что я уже пробовал:
Следующий код выполняет эту задачу, но вызывает индикатор выполнения проводника windows:
[DllImport("shell32.dll", CharSet = CharSet.Unicode, EntryPoint = "SHFileOperation")] public static extern Int32 SHFileOperation32( ref SHFILEOPSTRUCT32 lpFileOp); [DllImport("shell32.dll", CharSet = CharSet.Unicode, EntryPoint = "SHFileOperation")] public static extern Int32 SHFileOperation64( ref SHFILEOPSTRUCT64 lpFileOp); // Address of an SHFILEOPSTRUCT structure that contains information // this function needs to carry out the specified operation. This // parameter must contain a valid value that is not NULL. You are // responsibile for validating the value. If you do not validate it, // you will experience unexpected results. public static Int32 SHFileOperation(ref SHFILEOPSTRUCT lpFileOp) { MachineType mt = GetMachineType(); Int32 result; switch (mt) { case MachineType.win32: SHFILEOPSTRUCT32 fos32 = new SHFILEOPSTRUCT32(lpFileOp); result = SHFileOperation32(ref fos32); lpFileOp.CopyFrom(fos32); break; case MachineType.win64: SHFILEOPSTRUCT64 fos64 = new SHFILEOPSTRUCT64(lpFileOp); result = SHFileOperation64(ref fos64); lpFileOp.CopyFrom(fos64); break; default: throw new ArgumentException("What kind of computer are you using? It's not 32 and not 64 bit"); } return result; }
Эффект отображения индикатора выполнения windows также может быть достигнут с помощью следующего кода:
Microsoft.VisualBasic.FileIO.FileSystem.CopyFile( @"D:\file1.txt", @"D:\file2.txt",UIOption.AllDialogs);
Но это не желаемая функциональность. Что требуется, так это вызвать установленный копировальный аппарат windows, такой как Supercopier, Teracopy, Ultracopier или другой. Очевидно, что эти инструменты реализуют расширение оболочки Windows и делают настройку процесса копирования. Я просматривал код на GitHub для некоторых из этих инструментов, чтобы увидеть обработчик крючка копирования, который они реализуют, и я не могу найти способ достичь своей цели.
Мне нужно вызвать оболочку windows таким образом, чтобы эти копировальные аппараты обнаружили событие и обработали его по-своему. Если у кого-то есть предложение, оно будет приветствоваться.
Gerry Schmitz
Итак, это работает, но вам не нравится "индикатор выполнения". В великой схеме вещей ...
yoandryLumpuy
Джерри это прекрасно работает, но клиент-босс, и он хочет, чтобы копировальный аппарат по умолчанию был активирован, потому что иногда они обеспечивают лучшую обработку и поведение копий.