Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .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, сам себе ответил  smile 

Автор: Naum 8.12.2006, 09:51
 smile 
Цитата(mr.DUDA @  7.12.2006,  23:20 Найти цитируемый пост)
DeviceIK, сам себе ответил

Ну и молодец. Он просто хотел тебе доказать, что это можно сделать и без C++/WinApi. smile)Дух противоречия.

Автор: ivashkanet 8.12.2006, 11:38
Если быть объективным, то нет:
Цитата
перехватывать запускаемые программы

Таким образом обрабатывается только уже запущенные процессы, а никак ни запускаемые.

Автор: Naum 8.12.2006, 11:52
Цитата(ivashkanet @  8.12.2006,  12:38 Найти цитируемый пост)
Таким образом обрабатывается только уже запущенные процессы, а никак ни запускаемые.

А в принципе, какая разница? В списке процессов запущенный процесс появляется все таки раньше, чем пользователь увидит, что процесс запущен. Почему бы не считать его запускаемым?

Автор: ivashkanet 8.12.2006, 11:57
Naum, не, я не про то.
Как узнать, что процесс собирается запуститься?
Гонять трэд в цикле и проверять: не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-
 smile 
Для этого нужно событие запуска нового процесса.
А для этого, ИМХО, нужен WinAPI

Автор: mr.DUDA 8.12.2006, 12:01
Пример с word - это частный случай, использующий к тому же OLE для работы с экземпляром запущенного word.  Вопрос стоит как перехватить и запретить запуск приложения? Или как работать с MS Word?

Цитата(Naum @  8.12.2006,  08:51 Найти цитируемый пост)
Ну и молодец. Он просто хотел тебе доказать, что это можно сделать и без C++/WinApi. )Дух противоречия.

Ну и ради бога, никто не запрещает делать так как нравится. Пусть тянет ворд через COM, если это поможет.

Автор: Naum 8.12.2006, 12:28
Цитата(DeviceIK @  7.12.2006,  00:21 Найти цитируемый пост)
обработать открываемый в нем файл

А слона-то я ни приметл.  smile 

Цитата(mr.DUDA @  7.12.2006,  11:30 Найти цитируемый пост)
проще тот же код написать на C++/WinAPI.

Но это мне тоже не совсем нравиться. Что же мне теперь все языки учить?

Автор: 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#, или все же проще на С++? Если можно, то подскажите нужные для этого библиотеки или литературу...Очень нужно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)