14 мая 2010 г.

Как запретить пользователю перетаскивать файлы в Проводнике?

Автор: Рэймонд Чен.
Оригинал на английском: How do I prevent users from dragging and dropping files in Explorer?

Клиенты не раз спрашивали меня: "Как запретить пользователю перетаскивать файлы в Проводнике?" В прошлом году трое из них высказывали более провокационные мысли: "Я хочу написать программу, которая перехватывает события Проводника и выводит сообщение перед каждым перетаскиванием файлов".

Это один их тех случаев, когда требуется выяснить, что нужно клиенту на самом деле. Они решили часть своей проблемы и просят помочь с решением оставшей части.

По своему опыту я знаю, что когда клиент задает такой вопрос, в действительности проблема одна из следующих:

Случай 1. Они хотят запретить пользователю перемещать в каталоги (или из каталогов), которые не должны изменяться пользователями. Другими словами, фактически вопрос звучит так: "Как запретить пользователю перемещать файлы, которые нельзя перемещать, и как запретить пользователю перемещать файлы в каталоги, которые нельзя изменять?".

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

Случай 2. Типичный ответ на просьбу "Объясните, пожалуйста, почему вам это нужно" звучит так: "Я считаю, что пользователи могут случайно переместить файлы. Они могут кликнуть файл и случайно переместить мышь - в результате файл будет ошибочно заброшен в другую папку". Другими словами, вопрос звучит так: "Как предотвратить случайное перетаскивание файлов?".

На этот вопрос ответ такой: увеличить чувствительность к перетаскиванию мышью (c помощью параметров SPI_SETDRAGWIDTH и SPI_SETDRAGHEIGHT функции SystemParametersInfo), чтобы пользователь переместил мышь на "явно не случайное" расстояние, прежде чем система воспримет это как операцию перетаскивания. Вы можете увеличить значение до 10, 30 или даже до 60 пикселей, в зависимости от того, какие у вас пользователи.

Комментариев нет:

Отправить комментарий