Форум: "Система";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];
ВнизПРОДОЛЖАЕМ ОБЛАМЫВАТЬ WIN9X Найти похожие ветки
← →
ATLANTIDO (2002-02-04 14:14) [0]Товарищи программисты ! Реально по caption"у
находить диалоговые окна типа "сохранение/открытие файла",
контролируя дествия пользователя : Не пускать его
к некоторым директориям путем закрытия этих окон ?
... Вот только отслеживать путь в строке адреса придеться
(возможно ли это ?), а с хуками клавиатуры тоже не хочеться
работать. Подумаем ?
← →
AlexRush (2002-02-05 15:17) [1]Ну ежели только подумать то пожалуйста...
Кэпшин этих диалогов устанавливается пользователем, плюс русская/нерусская винда, так что по нему искать ненадёжно. Можно в цикле или по таймеру энумеровать все топ-мост окна и среди них искать окно с именем класса Open/Save диалогов.
Но этот способ медленный, неудобный и опять-таки ненадежный, гораздо радикалинее перехватывать вызов функций GetSaveFileName и GetOpenFileName. Но есть и недостаток - тебе нужно знать конкретный процесс, в котором перехванывать эти ф-и. А я так понял, что задача состоит в том, чтобы недопустить юзверя в какой-то конкретный каталог. Тогда есть еще один вариант: пишется драйвер фаловой системы (правда не знаю, как это сделать под 9х), который будет прятать заданный каталог.
Вообще-то твоя задача теоретчески интересна, но я не вижу практической пользы. Если нужно спятать даннае и/или код, так есть много других способов, особенно под 9х. Просто приколоться над юзверем - есть вариант: файл, который юзверю открывать "не нужно", свойм резидентом открываешь для записи с зашаркой на чтение/запись, и никто к нему не доберется.
Опиши конкретнее свою задачу, может что-нибудь смогу подсказать.
← →
Victor (2002-02-05 16:06) [2]подумать...а чего тут думать!!!!
искать окна по капшину....нет ничего проще!!!
тебе окно закрыть же надо, так закрывай их по капшину:
допустим окно с капшином "Мой компьютер" пишем
sendmessage(findwindow(nil,"Мой компьютер"),wm_syscommand,sc_close,0);
и ставим эту хрень в таймере в результате окно капшин которого ты укажишь закроется ещё при открытие, вот-так-то!;)
А то драйвера писать :(
← →
ggrisha (2002-02-06 17:49) [3]Ну как я понял вопрос был в том, чтоб закрыть доступ пользователям к определенным каталогам во всех прогах, а не закрыть окно по капшену. Проще всего это сделать подменив DLLку со стандартными диалогами на свою. Старую Dllку переименовать и использовать из своей. И дальше при вызове GetSaveFileName и GetOpenFileName разбираться с диалоговыми окнами как угодно.
← →
ATLANTIDO (2002-02-07 01:03) [4]Моя задача: создать свой shell (прога типа как в комп. клубах),
только для комп. класа.
Юзеру доступны такие программы, как винамп, где можно
открыть упомянутые диалоги, и напакостить.
to AlexRush : какие ты имел в виду способы ?
("... так есть много других способов, особенно под 9х")
← →
AlexRush (2002-02-07 14:37) [5]ggrisha >> Обрати Внимание: В COMDLG32.DLL кроме GetOpenFileNameA,
GetOpenFileNameW,
GetSaveFileNameA,
GetSaveFileNameW есть еще 19 (NT4ws)экспортируемых функций, которые тоже придется перенаправить. Кроме того, придется еще включить в свою DLL еще и все ресурсы из реальной COMDLG32.DLL, т.к. нет гарантии что они не используются напрямую чем-либо.
ggrisha,ATLANTIDO >>
При написании своей DLL все ф-и нужно привязывать статически,
например, не забывая про CollingConvertion StdCall:
library COMDLG32;
.......
function my_PrintDlgA(var PrintDlg: TPrintDlg): Bool; stdcall;
external "RealCOMDLG32DLL.ext" name "PrintDlgA";
......
function PrintDlgA(var PrintDlg: TPrintDlg): Bool; stdcall; export;
begin
result:=my_PrintDlgA(PrintDlg);
end;
......
EXPORTS PrintDlgA name "PrintDlgA" index 117, .....
begin
end;
Нужно так же иметь ввиду, что некоторые проги могут импортировать ф-и не по имени а по Ord"у (индексу), по-этому нужно индексы расставить вручную.
Предположим, DLL-ловушка уже написана.
Как заменить DLL во время работы системы из своей проги:
Включаем свою Длл в ресурсы своей проги.
Вызываешь MoveFileEx(%SISDIR%\COMDLG32.DLL,%SYSDIR%\RealCOMDLG32DLL.ext,MOVEFILE_REPLACE_EXISTING);
Сохраняем ресурс с Длл в файл %SISDIR%\COMDLG32.DLL - готово!
Теперь проги, которые подгрузят COMDLG32.DLL, подгрузят уже твою ее "версию". При этом, проги, которые до перемещения файла использовали реальную COMDLG32.DLL, ее юзать и будут. По-этому желательно сделать подмену во время старта системы.(или вызвать перезагрузку Винды после подмены)
Реально я конкретно подменой DLL не занимался, но думаю должно сработать. Вариант подмены загруженного PE-модуля из ресурса отработан. Пиши - вышлю код.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c