Чи можливо таке реалізувати в Win Service?

Передісторія

Через власну неуважність та через те, що не завжди дивлюся на клавіатуру при вводі, виходить так, що написав щось латинськими буквами, хоча думав, що пишу кирилицею, або навпаки. І хотілося щоб була якась гаряча клавіша, щоб переводила оту виділену абракадабру на нормально написаний текст. Тобто, для прикладу, «yjhvfjnybq ntrcn» — на «нормальний текст».

Виникла думка написати Win Service, який би

а) реагував на «гарячу» клавішу

б) вибирав би виділений текст із активного вікна

в) вставляв в активне вікно свій перероблений меседж

Чи можливо це взагалі теретично? якщо так, то чи не підкажете щось в даному напрямку? може якісь посилання?

Ну, якщо з пунктом а) можна щось шукати, то із двома наступними якось виглядає важкувато...

П.С. мова програмування — C#

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дякую всім за дописи.
Від ідеї реалізувати це у він сервісі відмовився, спробував через tray app, winapi.

Уже майже готово:)

MessageBox.Show ( «Hello» ); добавив референс на System.Windows.Forms и ты увидишь, что диалоговое окно не появится (думаю, не ошибаюсь, а если ошибаюсь — хана я лажанулся:)

Насправді показати щось можливо, при конфігурації сервісу важливо встановити прапорець «Allow interaction with desktop» в true. Ще здається грає роль під яким аккаунтом стартує сервіс. Але це все так сказати bad practice, правильно буде власне через tray app.

На Windows Service ты такое не напишешь (да и винсервис не для этого предназначен): прооверрайдь метод OnStart, и первой строкой пропиши
MessageBox.Show ( «Hello» ); добавив референс на System.Windows.Forms и ты увидишь, что диалоговое окно не появится (думаю, не ошибаюсь, а если ошибаюсь — хана я лажанулся:)

Все дело в том, что Windows Service запускается вообще в другом контексте, и соответственно он в упор не увидит хэндлов твоих форм, и хэндлов элементов управления на них. Чтоб такое реализовать — нужно юзать WinAPI (получить хэндл элемента управления, на котором стоит фокус, получать коды нажатых клавиш), и запускать это дело как отдельный процесс. ИМХО, очень геморно. Но — реально (SPY++ это ведь делает)

2 gonzo))
угу, це саме те, що треба.
дуже дякую!

але хотілось би це і самому реалузвати... Не підкажеш як?

Підписатись на коментарі