| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Перехват системных вызовов |
| Автор: DeviceIK 6.12.2006, 23:21 |
| Сабж, собственно. Делал так под OpenBSD (там в модуль ядра библиотека записывалась), а теперь вот под винду понадобилось. В частности, надо перехватить открываемый winword.exe или, если он уже открыт - перехватить и обработать открываемый в нем файл. |
| Автор: mr.DUDA 7.12.2006, 10:30 |
| DeviceIK, я уже в соседнем топике ответил: на .NET эту задачу решить нельзя. Можно натыкать кучу [DllImport] винапишных функций, но проще тот же код написать на C++/WinAPI. |
| Автор: DeviceIK 7.12.2006, 20:48 |
| Re: Как перехватить вызов winword.exe или файл? [new] Process[] ProcWord=Process.GetProcessesByName("WINWORD"); int count1=0; foreach(Process pr in ProcWord) { count1++; } А дальше делаешь что хочешь ProcWord.Lenght? Re: Как перехватить вызов winword.exe или файл? [new] skorpk Сорри неправильно ответил. wrdApp = (Word.ApplicationClass)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application"); это перехватываешь событие если ворд запущен. А далее смотришь какой фаил открыт по имени файла. wrdApp.ActiveDocument.FullName; Можешь его принудительно блокировать. http://www.sql.ru/forum/ |
| Автор: mr.DUDA 7.12.2006, 22:20 |
| DeviceIK, сам себе ответил |
| Автор: Naum 8.12.2006, 09:51 |
| Ну и молодец. Он просто хотел тебе доказать, что это можно сделать и без C++/WinApi. |
| Автор: ivashkanet 8.12.2006, 11:38 | ||
Если быть объективным, то нет:
Таким образом обрабатывается только уже запущенные процессы, а никак ни запускаемые. |
| Автор: ivashkanet 8.12.2006, 11:57 |
| Naum, не, я не про то. Как узнать, что процесс собирается запуститься? Гонять трэд в цикле и проверять: не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд- Для этого нужно событие запуска нового процесса. А для этого, ИМХО, нужен WinAPI |
| Автор: mr.DUDA 8.12.2006, 12:01 | ||
Пример с word - это частный случай, использующий к тому же OLE для работы с экземпляром запущенного word. Вопрос стоит как перехватить и запретить запуск приложения? Или как работать с MS Word?
Ну и ради бога, никто не запрещает делать так как нравится. Пусть тянет ворд через COM, если это поможет. |
| Автор: Naum 8.12.2006, 12:28 |
А слона-то я ни приметл. Но это мне тоже не совсем нравиться. Что же мне теперь все языки учить? |
| Автор: mr.DUDA 8.12.2006, 13:08 |
| В 90% случаев любую задачу можно решить, используя те языки и технологии, с которыми ты знаком. Насколько это будет криво или наоборот - прямо, зависит не только от прямоты рук программиста, но и от близости предметной области задачи к документированным возможностям, которые язык/технология предоставляет. Кто спорит - пишите себе драйверы и т.п. руткиты в режиме ядра, только учтите что большая часть кода в любом случае будет вынесена из managed в native. Тут дело даже не в производительности, которую будет выдавать написанный в C# код, обрабатывающий запуск каждого приложения в системе; бог с ней, с производительностью. Но объясните мне глупому, какой выигрыш по возможностям, безглючности, удобству и т.п. мы получим, если вместо одной exe-шки написанной на C++/WinAPI будет exe на C#/.NET, юзающая кагал внешних dll, написанных на том же C++/WinAPI ??? Учитывая то, что содержательного кода в такой задаче будет минимум (проверить имя файла, имя приложения; заблокировать или разрешить), какой резон для этого писать его на C# ? |
| Автор: DeviceIK 8.12.2006, 22:54 |
| На дотнете - это просто прихоть. Билдер надоел донельзя! Хочется чего-то нового. Если понадобиться, то будет с++ и апи. А так, действительно интересно изучеть язык при решении конкретной задачи. |
| Автор: kamax70 20.3.2010, 21:59 |
| А допустим если задача выглядит так : Например запускается любое приложение А, вызывающее каку-либо функцию (хоть тот же MessageBox с текстом Х) по нажатию например кнопки. Затем я запускаю своё приложение, после чего по нажатию кнопки в приложении А будет появляться MessageBox с текстом Y, заданным мной. Я вроде читал в нете, что тут нужно внедрять написанный мной Dll в процесс А. Скажите, такую программу можно написать на C#, или все же проще на С++? Если можно, то подскажите нужные для этого библиотеки или литературу...Очень нужно. |