Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WPF + WinApi + инициализация 
V
    Опции темы
vikaz
Дата 13.11.2013, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 1
Всего: 12



Всем привет!

Пишу для себя небольшую программу для работы с буфером обмена. (Да,да таких много и я изобретаю велосипед. Но это просто желание узнать что-то новое)

Так вот. Есть две главных функциональности:

1) Хук на нажатие определенной комбинации клавиш

2) Хук на изменение данных в буфере обмена.

Чтобы реализовать данные вещи, нужно использовать WinApi. В принципе не так страшно. Кода, из которого можно понять как все работает - предостаточно. Но когда я начал писать свое приложение, то столкнулся с одной вещью, о которой и хотел рассказать.

Как Вы поняли я использую WPF и все это работает в паре с SimpleMVVM. 

Странность работы всех функций WinApi заключается в том, что мне их приходится инициализировать в методе Loadded главного окна, иначе функционал по перехвату изменений в буфере обмена, просто перестает работать. 

Именно по этой причине, мне пришлось создать два singlton'а (HotKey и Clipboard), в которых и описана вся функциональность по перехвату. Почему Singletone? Да потому что мне пришлось разместить инициализацию в методе loaded (передачу Window), а вызов делегата, когда происходит событие в mvvm классе.

Но это очень не удобно. Так как я хочу при запуске прятать окно присвоив ему hidden, а из-за этого не срабатывает событие loaded. В общем как-то бред.

Я хотел у Вас узнать, кто писал что-то подобное?

Как правильно организовать приложение?

Что делать с инициализацией?

Я создал маленько приложение по перехвату изменений в буфере обмена. Clipboard
Из этого приложения как раз и видно, в чем проблема.
Заранее спасибо.



--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
vikaz
Дата 13.11.2013, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 1
Всего: 12



Отвечу сам на свой вопрос.

Для того чтобы все это заработало, handle нужно получать через EventDispatchingNativeWindow.

Прямой ссылке на это нет, но есть библиотека, которую я нашел на просторах интернета. 

Managed Windows API

Скачав исходники, я откомпилировал их под .net 4.0.

Эта библиотека оказалась для меня просто находкой.

В ней много чего есть, но так же есть возможность ставить hook'и и на клавиатуру, и на буфер обмена.

Причем инициализировать можно даже в классе App, в событии OnStartup.

Круть!

Это сообщение отредактировал(а) vikaz - 13.11.2013, 12:06


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1116 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.