Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

активация приложения при определенном сочетании клавиш

47K
13 января 2010 года
rustamh
32 / / 19.12.2009
Все пытаюсь спарадировать Лингво.
Человек читает текст (в любом месте - в броузере, в блокноте, в ворде и т.д.). Выделяет непонятное слово , и нажимает резко Ctr+C+C . Т.е. держит ctr и два раза резко нажимает С.
как сделать чтобы после этого нажатия окно моего приложения активизировалось. и вылезло на первый план. (ну и отреагировало на слово в буфере- это думаю знаю как сделать).

сколько подобных тем не гуглил - везде кончается "капайте в сторону хуков", или "нужно Win API использовать".

Как будто это такая простая тема и я прямо взял и накопал сходу.
Я разбирался конечно с хуками - но смог только применить некоторые функции в случае - если мое приложение активно. А как быть, если человек вообще свернул приложение и забыл про него. а потом вдруг ему понадобилось перевести текст из стороннего приложения и он нажал сочетание клавиш?

также поступало предложение таймер задать в приложении и следить за нажатиями.

если кто знает наперед задачу - киньте пожалуйста кусочек кода как это все реализовать - один из двух методов.
288
13 января 2010 года
nikitozz
1.2K / / 09.03.2007
Почитайте здесь. Тут с примерами кода.
http://forum.codenet.ru/showthread.php?p=267785

P.S. на каком языке пишите?
14
13 января 2010 года
Phodopus
3.3K / / 19.06.2008
Блин, вот школота ленивая пошла! Уже задницу от стула не оторвать в ментальном смысле! Еще раз вам говорю: копайте в сторону хуков и(!) используйте WinAPI. Я упростил вам задачу с двух методов до одного. Можете еще RegisterHotKey() попробовать покопать. Поактивнее надо быть!
11
13 января 2010 года
oxotnik333
2.9K / / 03.08.2007
Цитата:
Т.е. держит ctr и два раза резко нажимает С.


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

9
13 января 2010 года
Lerkin
3.0K / / 25.03.2003
Цитата: rustamh
Выделяет непонятное слово , и нажимает резко Ctr+C+C . Т.е. держит ctr и два раза резко нажимает С.


Какой-то слабый ритуал. Не надо ему подражать, или, как вы выразились "пародировать". Лучше развить идею до:
Выделает непонятное слово. Суеверно плюётся во все стороны. Резко нажимает Ctrl+С+С+С+С (в зависимости от фазы Луны). Полный оборот на [COLOR="Silver"]жопе[/COLOR] стуле (можно 2 раза, если стул на пересечении магнитных линий). Потом, прочитав мантру "Ом control control хум", резко нажимает Enter+Scroll Lock+Power Button.
Если с первого раза не получилось, значит низкий уровень "Цзы" и остаток дня надо провести в медитации.
Вот это, понимаю, комбинация - заслуживающая внимания.

upd: Относительно хуков. Хук слева значительно слабее хука справа, если не проведена серия по корпусу.

47K
13 января 2010 года
rustamh
32 / / 19.12.2009
пишу на C# vs2008
школота не ленивая. я целый день с этим копался как-то. потом до ума не довел. потом забил. щас вот опять решил взяться. маленько с другого угла. Просто в этих хуках вообще логика другая и не понятная. И с документацией проблемы. - боюсь опять день потрачу и опять обламаюсь. - поэтому решил заранее спросить спецов.

сочетание клавиш Ctr+C+C самое нормальное, и не тупое. Человек сначала загоняет слово в буфер обмена, а потом дает понять проге - что хочет перевести это слово словарем. словарь вылазиит и переводит слово из буфера.

резкость нужна, чтобы человек, который скопировал слово а потом просто стал набирать текст "C" - не обнранужил перед носом программу, которую он не хотел видеть.
ну а так Lerkin жжет конечно по полной.
7
13 января 2010 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: rustamh
пишу на C# vs2008
школота не ленивая. я целый день с этим копался

Т.е. догадка Phodopus'а оказалась права(наполовину,только 1я часть)

Цитата: Lerkin
Хук слева значительно слабее хука справа, если не проведена серия по корпусу.

Это смотря какая рука толчковая у бьющего.Может,он левша?

Ой,о чём это я?:rolleyes:
Ах да.Так вот,какая проблема реализовать это через горячие клавиши?
Алгоритм примерно такой:
1)регистрируете её ПМЖ
2)при 1м нажатии ставите какой-то флаг и засекаете время
2)при 2м нажатии вычисляете разницу во времени.Если задержка < определённого значения,значит,пользователь хотел воспользоваться именно вашей программой(а не скопировал сначала один фрагмент текста,вставил куда-то и затем скопировал другой).Ну да,и флаг сбрасываете(можно вообще без флага обойтись)
Такие дела

P.S.И по клавиатуре лучше резко не бить,ага.А то пользователи вашей программы подадут на автора в суд за разбитые клавиатуры

47K
13 января 2010 года
rustamh
32 / / 19.12.2009
спасибо большое конечно за ответы.
но может я не в тот раздел написал :(
просто мне бы пару маленьких кусочков кода. ну не шарю я.
например - регистрируете пмж - это для меня полная ж - опять наверное целый день ковыряться. кучу статей перерыть, книги.
а догадка была правильная - первая половина) наверное надо больше от компа отходить и бегать на свежем воздухе. на лыжах кататься.
7
13 января 2010 года
@pixo $oft
3.4K / / 20.09.2006
Да,лыжи–это тема.А ПМЖ–это постоянное место жительства

Код писать лень(а я ещё вдобавок жуткая деревенщина необразованная–владею только VB и асмом),поэтому напишу несколько строк и более словами,чем кодом

Итак,регистрация горячей клавиши делается с помощью RegisterHotKey.Я,право,не знаю,как поведёт себя система после того,как вы переопределите системное сочетание клавиш,но…радуйтесь!Вам выпала доля пионера-экспериментатора
Далее,в цикле чтения сообщений(не помню,как его правильно звать) вы отлавливаете сообщение WM_HotKey
Кстати,в статейке есть пример этого самого дела

Будет что-то типа такого:
 
Код:
if(msg.message==WM_HOTKEY){
    if(prevTime-GetTime()>maxTimeDelta&&msg.lParam=hkId){
        //Тут ваш вод по копированию в буфер или что там у вас
    }
    prevTime=GetTime();
}
GetTime()–некая функция получения времени,hkId–идентификатор горячей клавиши.Насчёт msg.lParam не уверен,но вроде там будет храниться идентификатор.Или в msg.wParam,выбор не так уж и велик
Дальше делайте сами(я в этом не силён) либо ждите кого-то,кто за вас напишет

Удачных экспериментов
47K
14 января 2010 года
rustamh
32 / / 19.12.2009
@pixo $oft, спасибо, - думаю теперь есть за что зацепиться.

П.С. - я знаю что пмж - это постоянное место жительства, но не знал до сих пор , что это RegisterHotKey.
47K
20 января 2010 года
rustamh
32 / / 19.12.2009
вопрос встал маленько по другому.
как узнать, что пользователь нажал клавишу "C" (в любом приложении, не только в нашем).

если честно я так и не разобрался с хуками. очень сложно мне эта тема дается.
47K
20 января 2010 года
rustamh
32 / / 19.12.2009
вот то, что мне было нужно. с иходником специальной проги, в которой можно устанавливать разные горячие клавиши - хоть одну "с" например , хоть в комбинации с Alt, Ctr, Shift, Windows

http://www.cyberforum.ru/csharp-net/thread21209.html
щас надеюсь доведу до ума свою прогу :)
47K
20 января 2010 года
rustamh
32 / / 19.12.2009
на самом деле мне это не подходит как оказалось.
Вся эта тема с RegisterHotKey - мне это никак не годится.
потому как мне нужная логика такова - сначала юзер загоняет слово в буф.обмена, а затем нажимает С, что сигнализирует программе, чтобы активизироваться.

Если скажем зарегистрировать горячую клавишу Ctr+C - тогда при нажатии этой комбинации программа активизируется - но в буфер обмена ничего не попадет.
Если сделать горячую клавишу С - то либо при нажатии на С снова программа будет вылазить постоянно и не давать просто печатать С.
и т.д. - короче регистрация горячей клавиши полностью исключает использование этого же набора в "мирных целях"

Сейчас пока я поставил на форме таймер и там идет определение изменение буфера обмена.
Как бы сделать, чтобы форма активировалась в случае, если "С" нажата спустя четверть секунды после изменения буфера?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог