Заменить диалоговое окно сохранения файла, открываемое любой программой, настраиваемым диалоговым окном сохранения файла.

Я работаю над системой контроля версий / синхронизации файлов для Windows. Было бы здорово иметь флажок в нижней части классического диалогового окна сохранения файла с возможностью отмечать / снимать отметку с версией моего файла.

Можно ли прослушивать открытые диалоговые окна сохранения файлов любой программой (словом и т. Д.) И заменять / переопределять этот диалог настраиваемым (с дополнительным флажком)?

Если флажок установлен, должно появиться другое окно, в котором пользователь может ввести дополнительные метаданные. После этого данные сохраняются в локальной базе данных.

Я уже работал с подходом dmihailescu (ссылка предоставлена), но он очень сложный, и я не знаю, как изменить этот пример, чтобы прослушивать диалоги открытых файлов сохранения другими программами.

http://www.codeproject.com/Articles/19566/Extend-OpenFileDialog-and-SaveFileDialog-the-easy?msg=4779306#xx4779306xx

Другой подход - использовать FileSystemWatcher, но следить за всей системой очень дорого, и это не очень удобно, потому что пользователю нужно запрашивать любой созданный файл, если он / она хочет управлять его версиями.

Я надеюсь, что кто-то может помочь мне решить эту проблему или у вас есть дополнительные советы / подходы.

Спасибо.

Изменить: вариант использования

Пользователь должен написать документацию и создать новый документ Word. Когда он / она щелкает пункт меню «Сохранить как» слова, в моем настраиваемом диалоговом окне сохранения файла должно появиться окно с флажком внизу, независимо от того, должен ли этот файл быть версионным или нет. Если флажок установлен «активен», должно появиться новое окно, в котором пользователь может ввести дополнительные метаданные. После этого данные должны быть сохранены в локальной базе данных.

В моем случае в базе данных должны храниться только метаданные (например, путь и т. Д.). Предположим, пользователь хранит один и тот же файл в двух разных директориях (один файл «старый», а другой - текущий). Если пользователь открывает старую версию этого файла, моя система должна распознать, что «более новая» уже хранится в другом месте, и синхронизировать эти файлы.

Это должен быть очень простой пример.


person user3422749    schedule 15.03.2014    source источник


Ответы (1)


У вас есть две части функциональности: сохранение и контроль версий. Обе задачи на самом деле довольно сложные. Поэтому смешивать их не стоит. Лучше использовать стандартный Windows API для сохранения файла и не менять его. Подумайте, как бы вы поддержали несколько разных выпусков Windows и насколько это было бы болезненно.

Я предполагаю, что у вас есть собственный пользовательский интерфейс, и вы не интегрируетесь, скажем, с Windows Explorer (например, Tortoise Svn или Dropbox). В этом случае вы можете сначала выполнить магию контроля версий, а затем просто сохранить конечный файл с помощью стандартного API.

Если вы интегрируетесь с проводником Windows, я предлагаю вам взглянуть на исходный код svn черепахи < / а>.

person oleksii    schedule 15.03.2014
comment
Спасибо за быстрый ответ. Я отредактировал свой пост и добавил вариант использования. Проблема в том, что я хотел бы добиться какого-то автоматического поведения. Если пользователь создает документ, моя система должна распознать это, не спрашивая пользователя о каждом созданном документе, если для него должна быть установлена ​​версия. Для удобства использования, я думаю, гораздо удобнее настроить диалоговое окно сохранения файла для всей системы (возможно ли это ???) с помощью флажка, чтобы пользователь мог решить, версию файла или нет. Другая идея - добавить параметр управления версиями в контекстное меню. - person user3422749; 15.03.2014
comment
Как вы распознаете, был ли создан файл, который пользователь хочет контролировать, если я использую свой собственный интерфейс без интеграции с Windows? - person user3422749; 15.03.2014
comment
Просто личное мнение, попробуйте прототипировать свои идеи, так как у вас, кажется, их пара. Если вам нужен настраиваемый диалог из WinWord, для этого потребуется твердое знание Win API, COM, взаимодействия слов, C и C ++. Я бы забыл об этом. Кроме того, с точки зрения удобства использования, никто не любит нестандартные вещи. Сделать дополнительный щелчок сложно, особенно если нужно определиться с версией. Версия уже доступна "из коробки" в Word, svn / github и многих других. Dropbox также поддерживает версии. Так что, похоже, есть совпадения. Что я лично вижу, так это значительное совпадение - person oleksii; 16.03.2014
comment
со зрелыми инструментами и трудозатратами на реализацию этого с нуля. Может быть, я просто не понимаю вашей идеи ... Что касается вашего комментария. Как вы узнаете, был ли создан файл, который пользователь хочет контролировать, - я бы написал службу Windows для отслеживания определенного каталога на предмет любых изменений. Теперь, как следить, довольно сложно. У меня недостаточно опыта, но здесь будут сообщения, касающиеся Наблюдателя за файловой системой и его альтернатив. - person oleksii; 16.03.2014
comment
В данный момент я пишу об этом свою магистерскую диссертацию. Чего я хочу достичь: локальный контроль версий (сохранение файлов-метаданных) + репликация (синхронизация) БД с центральным, чтобы получить доступ с разных устройств / сотрудничать. Интерфейсы к различным системам: USB-устройства, файловая система, облачное хранилище (например, Dropbox, GoogleDrive: используйте API), вложения электронной почты. - person user3422749; 16.03.2014
comment
Чего я хочу добиться: чтобы пользователь всегда знал, где хранится текущий (самый новый) файл, и что старый файл синхронизируется с текущим (загрузить файл по пути). Поэтому я должен распознавать, когда файл создается в каждой системе (а не только в одной конкретной папке). Спасибо за вашу помощь :) - person user3422749; 16.03.2014
comment
Вы знаете, использует ли каждая программа свой собственный диалог сохранения файла? Я думал, что это обычный (общесистемный) диалог, который можно изменить? Если у каждой программы есть свой диалог сохранения файла, то этот подход у меня не работает :( - person user3422749; 16.03.2014
comment
Есть другие идеи? Можно ли прослушивать диалоговые окна открытых файлов сохранения и заменять их измененными (общесистемными)? Спасибо - person user3422749; 17.03.2014
comment
Извините, других идей нет. Можно заменить общесистемный диалог сохранения файла, но для этого потребуется драйвер ядра. Почти все антивирусные инструменты помечают это как вирус - руткит. Это то, что делают руткиты, они заменяют вызовы API ОС своей собственной реализацией. Для знающего человека на это потребуется несколько человеко-месяцев. Я бы рекомендовал забыть об этом и пересмотреть свою задачу. Но это просто мое понимание, я легко могу ошибаться. - person oleksii; 17.03.2014