Привет, уважаемые. У меня вопрос только к тем, кто знает что-то конкретное (может привести пример) или заинтересован. Материала у меня уже достаточно - не хватает только знаний, поэтому, пожалуйста, не давайте ссылок, где "что-то про это написано" - лучше не отвечайте вообще. Я хочу написать прогу, которую невозможно было бы закрыть в WinXP. Пока что я сделал два смежных процесса, которые одновременно сидят в памяти и запускают друг друга, когда кого-то из них выгружают. Но в TaskMan'е есть возможность завершить дерево процессов (команда Terminate process tree), что портит всю малину. Есть идея внедрить свою DLL, скажем, в процесс Explorer'а и заставить ее работать как программу-помощник (см. выше). Тогда это будет отдельный процесс и "Terminate process tree" не сможет все закрыть. Но тут-то и трудности. Если внедрить ее с помощью
хуков, то Unhook произойдет автоматически, как только главное приложение закроется (поправьте, если ошибаюсь). So, надо сделать так, чтобы некая прога приаттачила DLL к explorer'у, и та DLL потом не зависела от работы этой некой проги, а работала бы там сама по себе. 1) Как это сделать? У меня есть чужая библиотека (нашел на http://EliCZ.cjb.net), где есть такая возможность, но исходников этой либы нет, а не хотелось бы таскать ее с моей прогой. 2) Как сделать, чтобы приаттаченная DLL создала таймер и выполняла какие-либо действия при его срабатывании. При DLL_PROCESS_ATTACH я пытаюсь сделать SetTimer с обработкой таймера в процедуре моей DLL. Также пытался создать в DLL диалог (CreateDialog) и ловить сообщение WM_TIMER в нем. Наверное иду не тем путем - ничего не получается. С надеждой на понимание. Nex
Доброе время суток, Nex! Выслал исходник , как приаттачить либу к чужому процессу.. В примере есть ДЛЛ-ка. Если ее загрузить в адресное пространство чужого процесса, то при закрытии она выдает сообщение (она перехватывает вызов ExitProcess :)) )
Ответ отправлен: 10.06.2003, 18:06 Отправитель: Ramzes Отвечает BOLT
Здравствуйте, Nex! Ну раз у тебя много материала, то ты должен знать как вырубить Task Manager в Windows XP.У меня маловато материала, но я знаю как это сделать.Если заинтересуешься, то пиши, помогу. Да прибудет с тобой Велика Сила! Ответ отправлен: 09.06.2003, 13:50 Отправитель: BOLT
Вопрос № 845
Скажите где ошибка!!! Всю оптимизацию отключил. Должна выводить: D DD DDD DDDD А выводит: DDD DDD DDD DDD или еще хуже (в зависимости от настроек)
Приветствую Вас, Quas! 1.для поиска символа используй стандартные функции, например strchr или strrchr 2.Ты у себя в первом цикле ищешь до _MAX_PATH(кстати ошибка выхода из диапазона, ну да ладно, все равно в корне неправильно), хотя надо перебирать до конца строки, короче смотри п.1. 3.rt[elend] = ''; - неправильно, надо rt[elend]=0; 4.Остальные ошибки идут от этих. Успехов
Ответ отправлен: 09.06.2003, 19:06 Отправитель: Yuri Gordienko Отвечает Dzik
Добрый день, Quas! В путях надо ставить двойные слеши! Ответ отправлен: 10.06.2003, 05:27 Отправитель: Dzik Отвечает Avl2k
Доброе время суток, Quas! Оптимизация тут абсолютно не причем. Ошибок несколько: > for (short i = 0; i <= _MAX_PATH; i++) szPath состоит из _MAX_PATH символов - нехорошо обращаться за последний символ (индекс последнего символа _MAX_PATH - 1) > for (short i2 = elem; szPath[i2] != ' '; i2++) > rt[elend] = ' '; Непонятно, причем тут пробел - вообще-то строки заканчиваются нулем (или это RusFaq глючит?). В любом случае, когда ищете что-нибудь в строке, надо бы проверять на конец, а при формировании строки заканчивать ее нулем. Я так понял, что Вам нужно получить из пути имя файла без расширения - тогда не понятен алгоритм. Сначала Вы ищете точку, а затем копируете все символы после нее до первого пробела (или конца строки). Так Вы в лучшем случае получите расширение :) Вообще, в stdlib.h есть такая функция _splitpath. Она примерно этим и занимается.
Например: char path_buffer[_MAX_PATH]; char drive[_MAX_DRIVE]; // диск char dir[_MAX_DIR]; // директория char fname[_MAX_FNAME]; // имя файла char ext[_MAX_EXT]; // расширение strcpy(path_buffer, "D\D\DDDD.DDD"); _splitpath( path_buffer, drive, dir, fname, ext ); С уважением, Avl2k.
Ответ отправлен: 09.06.2003, 18:57 Отправитель: Avl2k
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.