Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Переименование у адление каталога. Запрет! [D5, Win95/98, WinME, Win2k, WinXP]


Шоломицкий ©   (2003-03-07 18:53:00) 

Нужно запретить переименование и удаление каталога.
Я думаю что надо предусмотреть два случая:
1)Закрытия контекстного меню для выбранной папки(запрет к пунктам "Переименовать" и "Удалить"
2)Запред нажатию Del , F2 на выбранной папке
Помогите осощуствить плиз


Александр Спелицин   (2003-03-26 20:38:00) [1]


> Нужно запретить переименование и удаление каталога

По-моему вопрос был ясно задан. Про файлы в этом каталоге речи не было.


Шоломицкий   (2003-03-25 19:51:00) [2]

Александр Спелицин разве?
Заходишь в папку и удаляешь все вайлы кроме запущенного!(


Александр Спелицин   (2003-03-11 12:01:00) [3]

Поместите в этот каталог какой-либо exe/dll файл и запустите/загрузите его. И пока этот файл будет висеть в памяти, с каталогом Вы ничего не сделаете.


}{enon   (2003-03-09 20:54:00) [4]

Ну, файл от этого защищается открытием (для вывода, но без перезаписи). А поскольку каталог - это тоже своего рода файл, то можно попробовать открыть и его.


Pat   (2003-03-09 16:55:00) [5]

Хм...а на FAR и другие файловые менеджеры это тоже распространяется?


volk   (2003-03-09 13:20:00) [6]

Все намного проще, нужно написать shell extensions (расширение оболочки виндовс) в виде COM-сервера:

unit CopyMain;

interface

uses Windows, ComObj, ShlObj;

type
TCopyHook = class(TComObject, ICopyHook)
protected
function CopyCallback(Wnd: HWND; wFunc, wFlags: UINT; pszSrcFile: PAnsiChar;
dwSrcAttribs: DWORD; pszDestFile: PAnsiChar; dwDestAttribs: DWORD): UINT; stdcall;
end;

TCopyHookFactory = class(TComObjectFactory)
protected
function GetProgID: string; override;
procedure ApproveShellExtension(Register: Boolean; const ClsID: string);
virtual;
public
procedure UpdateRegistry(Register: Boolean); override;
end;

implementation

uses ComServ, SysUtils, Registry;

{ TCopyHook }

// This is the method which is called by the shell for folder operations
function TCopyHook.CopyCallback(Wnd: HWND; wFunc, wFlags: UINT;
pszSrcFile: PAnsiChar; dwSrcAttribs: DWORD; pszDestFile: PAnsiChar;
dwDestAttribs: DWORD): UINT;
const
MyMessage: string = "Are you sure you want to mess with "%s"?";
begin
// confirm operation
Result := MessageBox(Wnd, PChar(Format(MyMessage, [pszSrcFile])),
"D4DG Shell Extension", MB_YESNO);
end;

{ TCopyHookFactory }

function TCopyHookFactory.GetProgID: string;
begin
// ProgID not needed for shell extension
Result := "";
end;

procedure TCopyHookFactory.UpdateRegistry(Register: Boolean);
var
ClsID: string;
begin
ClsID := GUIDToString(ClassID);
inherited UpdateRegistry(Register);
ApproveShellExtension(Register, ClsID);
if Register then
// add shell extension clsid to CopyHookHandlers reg entry
CreateRegKey("directory\shellex\CopyHookHandlers\" + ClassName, "",
ClsID)
else
DeleteRegKey("directory\shellex\CopyHookHandlers\" + ClassName);
end;

procedure TCopyHookFactory.ApproveShellExtension(Register: Boolean;
const ClsID: string);
// This registry entry is required in order for the extension to
// operate correctly under Windows NT.
const
SApproveKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved";
begin
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
if not OpenKey(SApproveKey, True) then Exit;
if Register then WriteString(ClsID, Description)
else DeleteValue(ClsID);
finally
Free;
end;
end;

const
CLSID_CopyHook: TGUID = "{66CD5F60-A044-11D0-A9BF-00A024E3867F}";

initialization
TCopyHookFactory.Create(ComServer, TCopyHook, CLSID_CopyHook,
"D4DG_CopyHook", "D4DG Copy Hook Shell Extension Example",
ciMultiInstance, tmApartment);
end.

А вообще есть мощная книга С.Тейксейра и К.Пачеко
Delphi 5 Руководство разработчика.
Очень толково и понятно. Даже денег не жалко
www.williamspublishing.com
там есть все исходники из книги, но без самой книги
трудно понять, что к чему относится.
Удачи.


Шоломицкий   (2003-03-08 15:29:00) [7]

Мда....круто


Pat   (2003-03-08 11:28:00) [8]

Свой драйвер писать


IContextMenu   (2003-03-08 02:45:00) [9]

ICopyHook


Song   (2003-03-07 20:18:00) [10]

В разных ОС будет всё по-разному.


Шоломицкий   (2003-03-07 20:16:00) [11]

Почему?
Надо как-то определить handle меню папки хотя бы


Song   (2003-03-07 20:13:00) [12]

Бесполезно этим заниматься.


Наверх

Титульная страница Поиск, карта сайта Написать письмо