Copy file instead of move (drag'n'drop)
От: ab1111  
Дата: 23.07.07 13:55
Оценка:
Как "заставить" Windows копировать файл в заданную папку при выполнении Drag'n'drop независимо от того, находится ли файл на том же диске, что и папка, или нет? (по умолчанию поведени е виндовс — копировать с других дисков и перемещать, если source file и drop target folder находятся на одном диске).

23.07.07 18:08: Перенесено модератором из 'C/C++' — Кодт
26.07.07 21:26: Перенесено модератором из 'Прочее'. Вопрос по Shell Extensions — Кодт
Re: Copy file instead of move (drag'n'drop)
От: Кодт Россия  
Дата: 23.07.07 14:07
Оценка:
Здравствуйте, ab1111, Вы писали:

A>Как "заставить" Windows копировать файл в заданную папку при выполнении Drag'n'drop независимо от того, находится ли файл на том же диске, что и папка, или нет? (по умолчанию поведени е виндовс — копировать с других дисков и перемещать, если source file и drop target folder находятся на одном диске).


Нажать и держать Ctrl во время отпускания правой кнопки мыши.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[2]: Copy file instead of move (drag'n'drop)
От: ab1111  
Дата: 23.07.07 14:22
Оценка:
Здравствуйте, Кодт, Вы писали:
>...
К>Нажать и держать Ctrl во время отпускания правой кнопки мыши.

К сожалению, не подходит. Уточнение — при обычном перетягивании (никаких клавиш модификаторов или же перетягиваний правой кнопкой). То есть для пользователя эта папка должна быть обычной и он должен использовать drag-n-drop обычным способом. Но при этом файл должен всегда копироваться. Допускаются специфичные настройки системы, shell extensions etc.
Re[2]: Copy file instead of move (drag'n'drop)
От: Пётр Седов Россия  
Дата: 23.07.07 21:02
Оценка:
Здравствуйте, Кодт, Вы писали:
К>Нажать и держать Ctrl во время отпускания правой кнопки мыши.
Почему правой?

2 ab1111:
Удерживая Ctrl, сделайте обычный drag'n'drop (левой кнопкой мыши). При этом курсор будет такой: стрелка и квадратик с плюсом (Windows XP, настройки по умолчанию).

P. S. А теперь правильное решение: F5 в Far-е .
Пётр Седов (ушёл с RSDN)
Re[3]: Copy file instead of move (drag'n'drop)
От: Кодт Россия  
Дата: 24.07.07 08:08
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

К>>Нажать и держать Ctrl во время отпускания правой кнопки мыши.

ПС>Почему правой?
Потому что ошибся Я использую правильное решение, а в эксплорер лазаю только от безысходности.

ПС>P. S. А теперь правильное решение: F5 в Far-е .

Ес, ыт ыз!
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[3]: Copy file instead of move (drag'n'drop)
От: ab1111  
Дата: 24.07.07 09:01
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>Здравствуйте, Кодт, Вы писали:

К>>Нажать и держать Ctrl во время отпускания правой кнопки мыши.
ПС>Почему правой?

ПС>2 ab1111:

ПС>Удерживая Ctrl, сделайте обычный drag'n'drop (левой кнопкой мыши). При этом курсор будет такой: стрелка и квадратик с плюсом (Windows XP, настройки по умолчанию).

ПС>P. S. А теперь правильное решение: F5 в Far-е .



Лично _я_ знаю о всех этих способах с правыми кнопками и клавишами-модификаторами... Решение делается не для себя, а для среднестатистического пользователя. То есть пользователь, не задумываясь, должен получать всегда копирование при перетягивании в конкретную папку. НЕ нажимая при этом доп. клавиш и используя обычное перетягивание левой кнопкой. То есть вопрос в категорию "программирование" (или возможно "настройка ОС") но никак в использование Винды для новичков

ЗЫ а я TC пользуюсь...
Re[4]: Copy file instead of move (drag'n'drop)
От: Пётр Седов Россия  
Дата: 25.07.07 12:59
Оценка:
Здравствуйте, ab1111, Вы писали:

A>Решение делается не для себя, а для среднестатистического пользователя. То есть пользователь, не задумываясь, должен получать всегда копирование при перетягивании в конкретную папку. НЕ нажимая при этом доп. клавиш и используя обычное перетягивание левой кнопкой.

Имеет смысл почитать статьи из раздела «Windows Shell».
Также на ум приходит следующее решение. Когда Windows начинает работать, автоматически запускается наша программа. Она показывает окно. У этого окна есть расширенный стиль (extended style) WS_EX_ACCEPTFILES, поэтому на это окно можно перетаскивать файлы из Explorer-а (drag'n'drop-ом), окно при этом получает сообщение WM_DROPFILES. Параметр wParam – это HDROP, из него можно вытащить пути файлов с помощью функции DragQueryFile.
Можно сделать так, чтобы это окно было похоже не на стандартное окно с рамкой (title bar и так далее), а на иконку c текстом. Для этого нужно:
* Указать тип окна WS_POPUP (а не WS_OVERLAPPED; у overlapped-окон всегда есть title bar).
* Сделать окно сложной (то есть не прямоугольной) формы. Есть два способа:
1. Создать GDI-регион (например, с помощью функции ExtCreateRegion) и назначить его окну с помощью функции SetWindowRgn.
2. Начиная с Windows 2000 можно создать layered-окно (расширенный стиль WS_EX_LAYERED) и указать некоторый цвет как «прозрачный» с помощью функции SetLayeredWindowAttributes. Pixel-ы окна «прозрачного» цвета не видны, вместо них виден фон (desktop или другие окна).

Также есть статья «Работа с регионами Windows GDI. Создание непрямоугольных окон.»
Автор(ы): Сапронов Андрей Юрьевич
Дата: 28.05.2003
В статье рассматривается создание непрямоугольных окон с применением регионов Windows GDI. Помимо непосредственного описания создания непрямоугольных окон, описано использование функций WinAPI для работы с регионами, а также соответствующих им методов класса CRgn библиотеки MFC.
.

A>То есть вопрос в категорию "программирование" (или возможно "настройка ОС") но никак в использование Винды для новичков

Тогда да, эту ветку надо перенести в форум «WinAPI».
Пётр Седов (ушёл с RSDN)
Re: Copy file instead of move (drag'n'drop)
От: OdesitVadim Украина  
Дата: 26.07.07 08:31
Оценка:
Здравствуйте, ab1111, Вы писали:

A>Как "заставить" Windows копировать файл в заданную папку при выполнении Drag'n'drop независимо от того, находится ли файл на том же диске, что и папка, или нет? (по умолчанию поведени е виндовс — копировать с других дисков и перемещать, если source file и drop target folder находятся на одном диске).

Зажать Ctrl? только какое отношение к теме топика?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Copy file instead of move (drag'n'drop)
От: Пётр Седов Россия  
Дата: 26.07.07 09:24
Оценка:
Здравствуйте, OdesitVadim, Вы писали:
OV>Зажать Ctrl? только какое отношение к теме топика?
Насколько я понял, ab1111 хочет сделать высокоуровневый интуитивно-понятный (drag'n'drop) интерфейс пользователя. Но не для себя, а для стороннего пользователя, которому не обязательно знать Far или что-нибудь подобное. Поэтому ab1111 хочет, чтобы при перетаскивании файлов на иконку его folder-а выполнялись необычные действия (не то, что по умолчанию в Explorer-е). В Windows уже есть аналогичные feature: если файл перетащить на иконку recycled bin, то файл «исчезнет»; если файл перетащить на иконку принтера, то Windows попытается распечатать файл.
Пётр Седов (ушёл с RSDN)
Re[5]: Copy file instead of move (drag'n'drop)
От: ab1111  
Дата: 26.07.07 11:41
Оценка:
Здравствуйте, Пётр Седов

Попробую переформулировать вопрос в виде use-case.
1) Открываем в первом окне Windows Explorer папку C:\test1
2) Открываем во втором окне Windows Explorer папку C:\test2
3) Выделяем и тащим левой кнопкой мыши файл test.txt из окна C:\test2 в окно C:\test1

Получаем: файл test.txt _перемещён_ из test2 в test1.
Требуется: файл test.txt скопирован из test2 в test1, при этом никаких дополнительных действий вроде нажатий клавиши Ctrl не придпринималось.
---
В принципе да, Вы правы, я ожидал решить это с Shell Extensions. Но _как_ это сделать найти мне не удалось, собственно из-за чего и возник вопрос здесь.

ЗЫ Изначально вопрос публиковался в С/С++, но был перенесён ув. модератором.
Re[3]: Copy file instead of move (drag'n'drop)
От: Leonid Troyanovsky  
Дата: 27.07.07 05:45
Оценка:
Здравствуйте, Пётр Седов, Вы писали:

ПС>Насколько я понял, ab1111 хочет сделать высокоуровневый интуитивно-понятный (drag'n'drop) интерфейс пользователя. Но не для себя, а для стороннего пользователя, которому не обязательно знать Far или что-нибудь подобное. Поэтому ab1111 хочет, чтобы при перетаскивании файлов на иконку его folder-а выполнялись необычные действия (не то, что по умолчанию в Explorer-е). В Windows уже есть аналогичные feature: если файл перетащить на иконку recycled bin, то файл «исчезнет»; если файл перетащить на иконку принтера, то Windows попытается распечатать файл.


А если перетащить на ярлык папки с сетевого диска, то файлы скопируются независимо от ctrl.
Т.е., решение вполне обыденное — сделать для этого пользователя(ей) папку(и) на сервере.
От оной централизации может быть и другая польза, IMHO.
--
С уважением, LVT
Re: Copy file instead of move (drag'n'drop)
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 06.08.07 17:02
Оценка:
Здравствуйте, ab1111, Вы писали:

A>Как "заставить" Windows копировать файл в заданную папку при выполнении Drag'n'drop независимо от того, находится ли файл на том же диске, что и папка, или нет? (по умолчанию поведени е виндовс — копировать с других дисков и перемещать, если source file и drop target folder находятся на одном диске).

Если у Вас свое приложение которое умеет работать с Shell Namespace Extension (грубо говоря свой explorer, реализующий IShellFolder и т.п.), то достаточно использовать DROPEFFECT_COPY в ф-х вроде DoDragDrop.

подробная схема Drag drop описана например тут Transferring Shell Objects with Drag-and-Drop and the Clipboard

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


вообще, полной уверенности что есть официальный COM/Shell способ для кастомизации под себя drag drop операций на уровне shell namespace, когда и source и target чужие — у меня нет.


Но если даже Shell Extensions вдруг окажется недостаточно — всегда можно в чужом процессе, вроде самого explorer — внедриться и поставить хуки на нужные места (тот же DoDragDrop), где и подменять требования move на copy. И\или, возможно, придется следить за запросом интерфейсов IDropTarget и отслеживать потом вызовы их методов DragEnter/DragLeave/Drop — с той же целью подмены запрошенного DROPEFFECT на свой.
... << RSDN@Home 1.2.0 alpha rev. 685>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.