Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.46 MB
Время: 0.006 c
4-2721
alexey1
2002-02-27 12:41
2002.05.02
WIN API


1-2623
Ivan Voronov
2002-04-20 11:05
2002.05.02
Шаблоны/регулярные выражения в Delphi


14-2679
Bboy
2002-03-26 22:02
2002.05.02
Очередь загрузки в Windows


6-2632
dedoff
2002-02-16 18:07
2002.05.02
Как отправить почту через DNS-сервер(-)


3-2484
Hermit
2002-04-10 10:14
2002.05.02
Системные настройки BDE (все еще актуально)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский