![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| MuForum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
Доброе время суток!
- Так как мне никто не смог помочь в моей приведущей теме, то я уже пишу новую с новой проблемой. Задача: Необходимо перехватывать системные сообщения указанному окну. На C++ это выглядело так:
Перевести данный код в полном объёме на C# у меня не выходит =( # Вот то, что у меня приблизительно выходит:
Это сообщение отредактировал(а) MuForum - 29.10.2007, 15:01 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
||||
|
|||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 4 Всего: 6 |
А нужно ли вообще переводить? Напиши дллку на плюсах, а потом из программы на C# просто вызывай из неё нужный метод - и будет тебе щастье
-------------------- 3 ГОДА НА |
|||
|
||||
| MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
#2, VisualProgrammerNET - Тут дело принципа, хоче разобраться и сделать именно на C#.
P.S. -> Если можешь помочь, буду благодарен. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
| Walker |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 23.10.2006 Репутация: 5 Всего: 16 |
Доброго времени суток!
В .NET концепция сообщений завуалирована концепцией событий. Аналогии сможете позднее провести самостоятельно. Вы "подписываете" контрол на системное событие (Загрузка окна, щелчок кнопки мыши, нажатие на кнопку клавиатуры). Делается это путём объявления делегата.
Как только событие происходит, вызывается функция его обработки, которой в числе аргументов передаются ещё и дополнительные полезные сведения, полученные от системы - например, какая кнопка мыши именно была нажата и где находлся в это время курсор
Список событий, на которые может быть подписан контрол, приведён в документации (msdn - для встроенных MS-контролов). Если работаете в студии, то в дизайнере в свойствах контрола есть перечень событий - находите нужное, щёлкаете два раза мышкой и пишите код функции обработки события. Т.е. то, что бы Вы написали после, например, case WM_ACTIVATE: P.S. Примеры приведены на собтыие загрузки окна. -------------------- "От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..." |
||||
|
|||||
| MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
#4, Walker - Проблема в том, что я работаю с чужим окном, а не своим!
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
| Walker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 23.10.2006 Репутация: 5 Всего: 16 |
Хук, что ли, поставить? Тогда, ИМХО, боюсь, C# действительно неэффективен для таких задач. Я не знаю классов, "занимающихся этим вопросом". Попробуйте поискать в направлении "C# для диагностических задач", может есть методы цепляния к чужим процессам, но и они не могут быть реализованы в безопасном коде... Кстати, нужное вам окно тоже спроектировано в .NET? Если нет, то нельзя однозначно, ведь приходится вылезать за границы среды исполнения. Тогда пишите класс управления "хуками", засунутыми в dll.
-------------------- "От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..." |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
MuForum, .NET не самая подходящая среда для таких хитростей. Лучше наверное оставить этот низкоуровневый код в исходном виде, видимо, в DLL, иначе он с чужими окнами работать никак не мог. И посылать из него уведомления управляющему .NET процессу с помощью SendMessage или другого механизма.
Добавлено через 7 минут и 33 секунды .. или под чужими окнами подразумеваются чужие, но в том же процессе? -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Stepan_Lameroff |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 16.12.2006 Репутация: 9 Всего: 14 |
Набросал по-быстрому (не тестировал!)
Думаю, что после доработки напильником должно работать
|
|||
|
||||
| MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
#8, Stepan_Lameroff - Благодарю за помощь, сейчас буду разбираться.
P.S. -> Может кому понадобиться...
Это сообщение отредактировал(а) MuForum - 29.10.2007, 17:25 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
| MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
#8, Stepan_Lameroff - Сделал, но к сажалению почему-то функция вообще не вызывается по время работы =(
P.S. -> Появляется только сообщение "Step1", а "Step2" и "Step3" не появляются=(
P.S. -> Странно то, что функция по сути должны обрабатываться(Но как видно из примера, то шаги 2 и 3 не выводится сис.сообщениями) =( -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
| Stepan_Lameroff |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 16.12.2006 Репутация: 9 Всего: 14 |
Посмотрите Managed Windows API
Там есть ответы на все ваши вопросы. (начинайте с ...\mwinapi\ManagedWinapi\SystemWindow.cs) Исходники берите лучше в SVN - "svn co https://mwinapi.svn.sourceforge.net/svnroot/mwinapi/trunk mwinapi" здесь я выкладывал пример работы с этой библиотекой Это сообщение отредактировал(а) Stepan_Lameroff - 29.10.2007, 20:55 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |