|
Модераторы: gambit, Kefir, Partizan |
|
vikaz |
|
|||
Опытный Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 1 Всего: 12 |
Всем привет!
Пишу для себя небольшую программу для работы с буфером обмена. (Да,да таких много и я изобретаю велосипед. Но это просто желание узнать что-то новое) Так вот. Есть две главных функциональности: 1) Хук на нажатие определенной комбинации клавиш 2) Хук на изменение данных в буфере обмена. Чтобы реализовать данные вещи, нужно использовать WinApi. В принципе не так страшно. Кода, из которого можно понять как все работает - предостаточно. Но когда я начал писать свое приложение, то столкнулся с одной вещью, о которой и хотел рассказать. Как Вы поняли я использую WPF и все это работает в паре с SimpleMVVM. Странность работы всех функций WinApi заключается в том, что мне их приходится инициализировать в методе Loadded главного окна, иначе функционал по перехвату изменений в буфере обмена, просто перестает работать. Именно по этой причине, мне пришлось создать два singlton'а (HotKey и Clipboard), в которых и описана вся функциональность по перехвату. Почему Singletone? Да потому что мне пришлось разместить инициализацию в методе loaded (передачу Window), а вызов делегата, когда происходит событие в mvvm классе. Но это очень не удобно. Так как я хочу при запуске прятать окно присвоив ему hidden, а из-за этого не срабатывает событие loaded. В общем как-то бред. Я хотел у Вас узнать, кто писал что-то подобное? Как правильно организовать приложение? Что делать с инициализацией? Я создал маленько приложение по перехвату изменений в буфере обмена. Clipboard Из этого приложения как раз и видно, в чем проблема. Заранее спасибо. -------------------- Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
vikaz |
|
|||
Опытный Профиль Группа: Участник Сообщений: 869 Регистрация: 15.2.2006 Репутация: 1 Всего: 12 |
Отвечу сам на свой вопрос.
Для того чтобы все это заработало, handle нужно получать через EventDispatchingNativeWindow. Прямой ссылке на это нет, но есть библиотека, которую я нашел на просторах интернета. Managed Windows API Скачав исходники, я откомпилировал их под .net 4.0. Эта библиотека оказалась для меня просто находкой. В ней много чего есть, но так же есть возможность ставить hook'и и на клавиатуру, и на буфер обмена. Причем инициализировать можно даже в классе App, в событии OnStartup. Круть! Это сообщение отредактировал(а) vikaz - 13.11.2013, 12:06 -------------------- Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ |
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |