активация приложения при определенном сочетании клавиш
Человек читает текст (в любом месте - в броузере, в блокноте, в ворде и т.д.). Выделяет непонятное слово , и нажимает резко Ctr+C+C . Т.е. держит ctr и два раза резко нажимает С.
как сделать чтобы после этого нажатия окно моего приложения активизировалось. и вылезло на первый план. (ну и отреагировало на слово в буфере- это думаю знаю как сделать).
сколько подобных тем не гуглил - везде кончается "капайте в сторону хуков", или "нужно Win API использовать".
Как будто это такая простая тема и я прямо взял и накопал сходу.
Я разбирался конечно с хуками - но смог только применить некоторые функции в случае - если мое приложение активно. А как быть, если человек вообще свернул приложение и забыл про него. а потом вдруг ему понадобилось перевести текст из стороннего приложения и он нажал сочетание клавиш?
также поступало предложение таймер задать в приложении и следить за нажатиями.
если кто знает наперед задачу - киньте пожалуйста кусочек кода как это все реализовать - один из двух методов.
в клавиатуре датчик резкости встроен? т.е. если плавно нажать (с тем же временным интервалом), то реакция системы должна быть другой?
Какой-то слабый ритуал. Не надо ему подражать, или, как вы выразились "пародировать". Лучше развить идею до:
Выделает непонятное слово. Суеверно плюётся во все стороны. Резко нажимает Ctrl+С+С+С+С (в зависимости от фазы Луны). Полный оборот на [COLOR="Silver"]жопе[/COLOR] стуле (можно 2 раза, если стул на пересечении магнитных линий). Потом, прочитав мантру "Ом control control хум", резко нажимает Enter+Scroll Lock+Power Button.
Если с первого раза не получилось, значит низкий уровень "Цзы" и остаток дня надо провести в медитации.
Вот это, понимаю, комбинация - заслуживающая внимания.
upd: Относительно хуков. Хук слева значительно слабее хука справа, если не проведена серия по корпусу.
школота не ленивая. я целый день с этим копался как-то. потом до ума не довел. потом забил. щас вот опять решил взяться. маленько с другого угла. Просто в этих хуках вообще логика другая и не понятная. И с документацией проблемы. - боюсь опять день потрачу и опять обламаюсь. - поэтому решил заранее спросить спецов.
сочетание клавиш Ctr+C+C самое нормальное, и не тупое. Человек сначала загоняет слово в буфер обмена, а потом дает понять проге - что хочет перевести это слово словарем. словарь вылазиит и переводит слово из буфера.
резкость нужна, чтобы человек, который скопировал слово а потом просто стал набирать текст "C" - не обнранужил перед носом программу, которую он не хотел видеть.
ну а так Lerkin жжет конечно по полной.
школота не ленивая. я целый день с этим копался
Т.е. догадка Phodopus'а оказалась права(наполовину,только 1я часть)
Это смотря какая рука толчковая у бьющего.Может,он левша?
Ой,о чём это я?:rolleyes:
Ах да.Так вот,какая проблема реализовать это через горячие клавиши?
Алгоритм примерно такой:
1)регистрируете её ПМЖ
2)при 1м нажатии ставите какой-то флаг и засекаете время
2)при 2м нажатии вычисляете разницу во времени.Если задержка < определённого значения,значит,пользователь хотел воспользоваться именно вашей программой(а не скопировал сначала один фрагмент текста,вставил куда-то и затем скопировал другой).Ну да,и флаг сбрасываете(можно вообще без флага обойтись)
Такие дела
P.S.И по клавиатуре лучше резко не бить,ага.А то пользователи вашей программы подадут на автора в суд за разбитые клавиатуры
но может я не в тот раздел написал :(
просто мне бы пару маленьких кусочков кода. ну не шарю я.
например - регистрируете пмж - это для меня полная ж - опять наверное целый день ковыряться. кучу статей перерыть, книги.
а догадка была правильная - первая половина) наверное надо больше от компа отходить и бегать на свежем воздухе. на лыжах кататься.
Код писать лень(а я ещё вдобавок жуткая деревенщина необразованная–владею только VB и асмом),поэтому напишу несколько строк и более словами,чем кодом
Итак,регистрация горячей клавиши делается с помощью RegisterHotKey.Я,право,не знаю,как поведёт себя система после того,как вы переопределите системное сочетание клавиш,но…радуйтесь!Вам выпала доля пионера-экспериментатора
Далее,в цикле чтения сообщений(не помню,как его правильно звать) вы отлавливаете сообщение WM_HotKey
Кстати,в статейке есть пример этого самого дела
Будет что-то типа такого:
if(prevTime-GetTime()>maxTimeDelta&&msg.lParam=hkId){
//Тут ваш вод по копированию в буфер или что там у вас
}
prevTime=GetTime();
}
Дальше делайте сами(я в этом не силён) либо ждите кого-то,кто за вас напишет
Удачных экспериментов
П.С. - я знаю что пмж - это постоянное место жительства, но не знал до сих пор , что это RegisterHotKey.
как узнать, что пользователь нажал клавишу "C" (в любом приложении, не только в нашем).
если честно я так и не разобрался с хуками. очень сложно мне эта тема дается.
Вся эта тема с RegisterHotKey - мне это никак не годится.
потому как мне нужная логика такова - сначала юзер загоняет слово в буф.обмена, а затем нажимает С, что сигнализирует программе, чтобы активизироваться.
Если скажем зарегистрировать горячую клавишу Ctr+C - тогда при нажатии этой комбинации программа активизируется - но в буфер обмена ничего не попадет.
Если сделать горячую клавишу С - то либо при нажатии на С снова программа будет вылазить постоянно и не давать просто печатать С.
и т.д. - короче регистрация горячей клавиши полностью исключает использование этого же набора в "мирных целях"
Сейчас пока я поставил на форме таймер и там идет определение изменение буфера обмена.
Как бы сделать, чтобы форма активировалась в случае, если "С" нажата спустя четверть секунды после изменения буфера?