Форум: "WinAPI";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
ВнизПереименование у адление каталога. Запрет! Найти похожие ветки
← →
Шоломицкий (2003-03-07 18:53) [0]Нужно запретить переименование и удаление каталога.
Я думаю что надо предусмотреть два случая:
1)Закрытия контекстного меню для выбранной папки(запрет к пунктам "Переименовать" и "Удалить"
2)Запред нажатию Del , F2 на выбранной папке
Помогите осощуствить плиз
← →
Song (2003-03-07 20:13) [1]Бесполезно этим заниматься.
← →
Шоломицкий (2003-03-07 20:16) [2]Почему?
Надо как-то определить handle меню папки хотя бы
← →
Song (2003-03-07 20:18) [3]В разных ОС будет всё по-разному.
← →
IContextMenu (2003-03-08 02:45) [4]ICopyHook
← →
Pat (2003-03-08 11:28) [5]Свой драйвер писать
← →
Шоломицкий (2003-03-08 15:29) [6]Мда....круто
← →
volk (2003-03-09 13:20) [7]Все намного проще, нужно написать 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
там есть все исходники из книги, но без самой книги
трудно понять, что к чему относится.
Удачи.
← →
Pat (2003-03-09 16:55) [8]Хм...а на FAR и другие файловые менеджеры это тоже распространяется?
← →
}{enon (2003-03-09 20:54) [9]Ну, файл от этого защищается открытием (для вывода, но без перезаписи). А поскольку каталог - это тоже своего рода файл, то можно попробовать открыть и его.
← →
Александр Спелицин (2003-03-11 12:01) [10]Поместите в этот каталог какой-либо exe/dll файл и запустите/загрузите его. И пока этот файл будет висеть в памяти, с каталогом Вы ничего не сделаете.
← →
Шоломицкий (2003-03-25 19:51) [11]Александр Спелицин разве?
Заходишь в папку и удаляешь все вайлы кроме запущенного!(
← →
Александр Спелицин (2003-03-26 20:38) [12]
> Нужно запретить переименование и удаление каталога
По-моему вопрос был ясно задан. Про файлы в этом каталоге речи не было.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c