none
wpf вставить текст из моего приложения, в приложение, которое было активно до этого. RRS feed

  • Вопрос

  • Всем привет!

    Задача следующая!

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

    Из всего перечисленного функционала, меня интересует только последнее, определение приложения, которое было активно на момент нажатия shotcut'a и вставка в это приложение текста, где на данный момент стоит курсор.

    Это реально сделать?

    Если да, то могли бы подсказать ресурсы, где об этом написано.

    Сам не смог найти ничего путного.

    Заранее спасибо


    • Изменено vikaz 9 ноября 2013 г. 6:28
    9 ноября 2013 г. 6:22

Ответы

  • Значит, вам нужно осваивать WinEvents. Для начала, нужно будет установить глобальный хук с помощью SetWinEventHook. Да, это функция WinApi. Как вызывать такие функции из управляемого кода, смотрим на сайте PInvoke.

    Далее. Когда управление перейдёт в функцию коллбэка установленного хука, для определения окна активного приложения используем опять же фукнцию WinApi GetForegroundWindow. Чтобы вставить текст в то окно, нужно послать ему специальное сообщение.

    Можно попробовать использовать управляемый класс SendKeys - методы Send или SendWait. Однако, далеко не всегда это срабатывает. Поэтому, возможно, придётся использовать апишную функцию SendMessage.

    Насколько удачным будет определение окна активного приложения, зависит от использованной при его написании технологии. Аналогично, успешность посылки сообщений в чужое приложение далека от 100%. Увы.

    -----

    Ресурсы, где обо всём этом написано. Вводите в любой поисковик названия упомянутых функций, и по ссылкам смотрите такие сайты, как: msdn, stackoverflow, codeproject. С вероятностью 99% будет полезная информация.

    • Помечено в качестве ответа vikaz 11 ноября 2013 г. 4:39
    10 ноября 2013 г. 17:58

Все ответы

  • Вам нужен Windows Communication Foundation.

    Очень не простая тема, но при этом его надо знать

    10 ноября 2013 г. 13:55
  • Первоначальное приложение, которое вызывает при нажатии шортката другое, оно тоже написано вами? Или нужно вмешаться в работу чужого приложения?

    10 ноября 2013 г. 17:10
  • Причем тут WCF? Я его немного знаю,  но даже не представляю, чем он мне может помочь.
    10 ноября 2013 г. 17:17
  • Приложение может быть любым: блокнот, word. Т.е. приложение стороннее!
    10 ноября 2013 г. 17:18
  • Значит, вам нужно осваивать WinEvents. Для начала, нужно будет установить глобальный хук с помощью SetWinEventHook. Да, это функция WinApi. Как вызывать такие функции из управляемого кода, смотрим на сайте PInvoke.

    Далее. Когда управление перейдёт в функцию коллбэка установленного хука, для определения окна активного приложения используем опять же фукнцию WinApi GetForegroundWindow. Чтобы вставить текст в то окно, нужно послать ему специальное сообщение.

    Можно попробовать использовать управляемый класс SendKeys - методы Send или SendWait. Однако, далеко не всегда это срабатывает. Поэтому, возможно, придётся использовать апишную функцию SendMessage.

    Насколько удачным будет определение окна активного приложения, зависит от использованной при его написании технологии. Аналогично, успешность посылки сообщений в чужое приложение далека от 100%. Увы.

    -----

    Ресурсы, где обо всём этом написано. Вводите в любой поисковик названия упомянутых функций, и по ссылкам смотрите такие сайты, как: msdn, stackoverflow, codeproject. С вероятностью 99% будет полезная информация.

    • Помечено в качестве ответа vikaz 11 ноября 2013 г. 4:39
    10 ноября 2013 г. 17:58
  • Спасибо Вам за ответ!
    11 ноября 2013 г. 4:40