Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Замена стандартного копирования Windows


Автор: D_soyer 24.4.2007, 23:44
  Нужно заменить копирование с помощью вин. метода на свою программу, может кто подскажет, как:
 - запретить запуск копирования виндой.
 - получить адреса, для передачи в свою программу.
  Буду очень благодарен. Заранее спасибо.

Автор: bartram 25.4.2007, 09:23
Цитата(D_soyer @  25.4.2007,  01:44 Найти цитируемый пост)
 Нужно заменить копирование с помощью вин. метода на свою программу, может кто подскажет, как:
 - запретить запуск копирования виндой.
 - получить адреса, для передачи в свою программу.
  Буду очень благодарен. Заранее спасибо. 

Это решается перехватом Api функций:
Код

CopyFileA
CopyFileW

Если не ошибаюсь....
http://forum.vingrad.ru/act-Search/CODE/show/searchid-38245490645927934ba44c82458784f0/search_in-posts/result_type/topics/flag/search/highlite/%25D0%25BF%25D0%25B5%25D1%2580%25D0%25B5%25D1%2585%25D0%25B2%25D0%25B0%25D1%2582+and+api/index.html

Автор: D_soyer 25.4.2007, 11:34
Цитата(bartram @  25.4.2007,  09:23 Найти цитируемый пост)
CopyFileA, CopyFileW


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

Автор: bartram 25.4.2007, 13:53
Цитата(D_soyer @  25.4.2007,  13:34 Найти цитируемый пост)
как получить из обозревателя нужные адреса? 

Какие ещё адреса?

Автор: D_soyer 25.4.2007, 19:03
Цитата(bartram @  25.4.2007,  13:53 Найти цитируемый пост)
Какие ещё адреса?

пример: я делаю ctrl+c и ctrl+v - как только вставляю, нужно отменить копирование виндой и передать пути копирования в мою программу.

Автор: bartram 25.4.2007, 21:04
Плохо искал.
Вот из MSDN:
http://msdn2.microsoft.com/en-us/library/aa363851.aspx
Именно их тебе и надо перехватывать

Автор: D_soyer 25.4.2007, 22:32
т.е. как я понял мне нужно регистрировать в системе процесс, который будет все время запущен и проверять вышеуказанные действия? Если не сложно, покажи на примере.

Автор: bartram 26.4.2007, 10:15
Тебе надо почитать про Перехват Api. Ссылку давал во втором посте

Автор: D_soyer 26.4.2007, 23:21
bartram
Хорошо, допустим я разобрался с перехватом и перехватил сообщение о копировании. Значит мне нужно зарегистрировать в системе процесс(dll), для постоянного наблюдения, так ведь? Либо можно организовать драг-н-дроп с правой клавиши, уже не трогая копирование виндовс(произодя копирование непосредственно моей программой). Но и первый и второй способ требует регистрации процесса, это для меня прямо тупик, может подкинешь идею?

Автор: dumb 27.4.2007, 00:41
Цитата(D_soyer @  26.4.2007,  23:21 Найти цитируемый пост)
допустим я разобрался с перехватом

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

Автор: D_soyer 27.4.2007, 12:31
function CopyFileHookProc(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL; stdcall; - хук копирования файла. Мне нужно отлавливать его все время, после установки(даже когда моя программа не запущена). Вопрос: как это реализовать?

Автор: bartram 27.4.2007, 13:06
Цитата(D_soyer @  27.4.2007,  14:31 Найти цитируемый пост)
function CopyFileHookProc(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL; stdcall; - хук копирования файла. Мне нужно отлавливать его все время, после установки(даже когда моя программа не запущена). Вопрос: как это реализовать? 

При запуске системы подгружай ко всем процессам через реестр.

Автор: D_soyer 27.4.2007, 14:42
bartram

Я не знаю, как это сделать. Понимаю принцип, но не техническую часть. Облазил реестр на примере Киллкопи, вот что нашел:

- как я понял, это хендлы контекстного меню (HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\KillCopy\{A5C2457A-87BC-324E-8124-0025DC10AA03})
HKEY_CLASSES_ROOT\*\shellex\DragDropHandlers\KillCopy\{A5C2457A-87BC-324E-8124-0025DC10AA03} - это один из вариантов, которые мне были нужны.
Цитата(D_soyer @  26.4.2007,  23:21 Найти цитируемый пост)
...Либо можно организовать драг-н-дроп с правой клавиши, уже не трогая копирование виндовс...

Эти значения: {A5C2457A-87BC-324E-8124-0025DC10AA03} берутся из головы?

- далее HKEY_CLASSES_ROOT\Folder - это, наверно, хендлы на драг-н-дроп папки(?)

- и по идее сама регистрация Киллкопи: HKEY_CLASSES_ROOT\CLSID\{A5C2457A-87BC-324E-8124-0025DC10AA03}\killcopy.dll

Автор: bartram 28.4.2007, 20:44
Код http://forum.vingrad.ru/index.php?showtopic=140242&view=findpost&p=1114521
Что непонятно- спрашивай

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)