Как написать свою собственную программу Global Snippets с .NET? - PullRequest
0 голосов
/ 26 августа 2009

Я хочу написать свой собственный инструмент для создания глобальных фрагментов для Windows XP и выше. Это будет всегда запущенный в фоновом режиме инструмент, который будет всплывать на глобально определенной горячей клавише, позволять мне выбирать фрагмент с аргументами подстановки, а затем вставлять расширенный фрагмент в текстовый ввод любого элемента управления, в котором я находился, когда активировал его и, наконец, вернул меня в это предыдущее окно ввода / вывода.

Я знаю, как выполнять большинство алгоритмических аспектов, но я не знаю, как реализовать эти функции на базе Windows:

1 - Глобальная горячая клавиша: как определить последовательность клавиш в окнах (из .net?), Которая будет работать даже при вводе данных в текстовое поле другого приложения? (Обычно это окно браузера)

2 - Вставка в другое приложение: я мог бы использовать буфер вставки и Ctrl-C, но я хочу избежать дополнительных нажатий клавиш.

3 - Вернуть элемент управления в исходное окно: легко вернуться обратно в мой поток ввода: как мне это сделать? На самом деле, как мой инструмент узнает, где я находился до того, как он появился?

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

Итак, два (2) вопроса: а) каким должен быть мой общий подход? и B) как лучше всего выполнить пункты с 1 по 3 выше?

1 Ответ

2 голосов
/ 26 августа 2009

Вам понадобится глобальная системная клавиатура для захвата вашей горячей клавиши. В статье CodeProject показано, как это сделать из .NET.

После того, как вы «поймали» нажатие клавиши, вы можете использовать Windows API, чтобы получить текущий дескриптор окна. Однако я бы постарался не активировать ваше приложение. Вы должны иметь возможность просто вставить новый текст и позволить приложению обрабатывать его.

Недостаток использования Windows API заключается в том, что он работает не во всех случаях, а «разбитые» случаи становятся все более распространенными. Например, приложения WPF не предоставляют HWND для каждого элемента в окне, поэтому получение дескриптора текущего «элемента управления» просто даст вам окно, а не соответствующий элемент.


Редактировать: еще одним справочным источником является статья в MSDN Magazine . Он показывает, как сделать это через C # с помощью P / Invoke.

...