![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| DeviceIK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 3.12.2006 Репутация: нет Всего: нет |
Сабж, собственно. Делал так под OpenBSD (там в модуль ядра библиотека записывалась), а теперь вот под винду понадобилось. В частности, надо перехватить открываемый winword.exe или, если он уже открыт - перехватить и обработать открываемый в нем файл.
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
DeviceIK, я уже в соседнем топике ответил: на .NET эту задачу решить нельзя. Можно натыкать кучу [DllImport] винапишных функций, но проще тот же код написать на C++/WinAPI.
-------------------- ![]() |
|||
|
||||
| DeviceIK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 3.12.2006 Репутация: нет Всего: нет |
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 |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
DeviceIK, сам себе ответил
-------------------- ![]() |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Ну и молодец. Он просто хотел тебе доказать, что это можно сделать и без C++/WinApi. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Если быть объективным, то нет:
Таким образом обрабатывается только уже запущенные процессы, а никак ни запускаемые. |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
А в принципе, какая разница? В списке процессов запущенный процесс появляется все таки раньше, чем пользователь увидит, что процесс запущен. Почему бы не считать его запускаемым? -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Naum, не, я не про то.
Как узнать, что процесс собирается запуститься? Гонять трэд в цикле и проверять: не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд- Для этого нужно событие запуска нового процесса. А для этого, ИМХО, нужен WinAPI |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Пример с word - это частный случай, использующий к тому же OLE для работы с экземпляром запущенного word. Вопрос стоит как перехватить и запретить запуск приложения? Или как работать с MS Word?
Ну и ради бога, никто не запрещает делать так как нравится. Пусть тянет ворд через COM, если это поможет. -------------------- ![]() |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
А слона-то я ни приметл. Но это мне тоже не совсем нравиться. Что же мне теперь все языки учить? -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
В 90% случаев любую задачу можно решить, используя те языки и технологии, с которыми ты знаком. Насколько это будет криво или наоборот - прямо, зависит не только от прямоты рук программиста, но и от близости предметной области задачи к документированным возможностям, которые язык/технология предоставляет. Кто спорит - пишите себе драйверы и т.п. руткиты в режиме ядра, только учтите что большая часть кода в любом случае будет вынесена из managed в native. Тут дело даже не в производительности, которую будет выдавать написанный в C# код, обрабатывающий запуск каждого приложения в системе; бог с ней, с производительностью.
Но объясните мне глупому, какой выигрыш по возможностям, безглючности, удобству и т.п. мы получим, если вместо одной exe-шки написанной на C++/WinAPI будет exe на C#/.NET, юзающая кагал внешних dll, написанных на том же C++/WinAPI ??? Учитывая то, что содержательного кода в такой задаче будет минимум (проверить имя файла, имя приложения; заблокировать или разрешить), какой резон для этого писать его на C# ? -------------------- ![]() |
|||
|
||||
| DeviceIK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 3.12.2006 Репутация: нет Всего: нет |
На дотнете - это просто прихоть. Билдер надоел донельзя! Хочется чего-то нового. Если понадобиться, то будет с++ и апи. А так, действительно интересно изучеть язык при решении конкретной задачи.
|
|||
|
||||
| kamax70 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 7.3.2010 Репутация: нет Всего: нет |
А допустим если задача выглядит так :
Например запускается любое приложение А, вызывающее каку-либо функцию (хоть тот же MessageBox с текстом Х) по нажатию например кнопки. Затем я запускаю своё приложение, после чего по нажатию кнопки в приложении А будет появляться MessageBox с текстом Y, заданным мной. Я вроде читал в нете, что тут нужно внедрять написанный мной Dll в процесс А. Скажите, такую программу можно написать на C#, или все же проще на С++? Если можно, то подскажите нужные для этого библиотеки или литературу...Очень нужно. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |