Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.11.17;
Скачать: [xml.tar.bz2];

Вниз

Очень глобальный HotKey.   Найти похожие ветки 

 
Дмитрий СС   (2013-05-31 13:13) [0]

Добрый день.
Требуется зарегистрировать такую HotKey, которая бы реагировала когда приложение "Подключение к удаленному рабочему столу" (mstsc.exe) развернуто на весь экран.
RegisterHotKey, глобальный хук по WH_KEYBOARD_LL не работают.

Есть соответствующая опция у mstsc.exe, но она отключить все удаленные хоткеи вроде Alt+Tab, поэтому отключение этой опции недопустимо.


 
Kilkennycat ©   (2013-05-31 23:32) [1]


>  отключить все удаленные хоткеи вроде Alt+Tab,

запрети.


 
Rouse_ ©   (2013-05-31 23:53) [2]

Суть задачи какая?
Сделать так чтобы при работающем "mstsc" работало что-то твое или более глубже?
Просто пока что это напоминает проблему http://www.transl-gunsmoker.ru/2010/06/blog-post_11.html


 
Дмитрий С ©   (2013-06-01 00:32) [3]


> Rouse_ ©   (31.05.13 23:53) [2]

Не совсем эта проблема.

Суть задачи такая:
Есть два десктопа (CreateDesktop): обычный Default и созданный мной Other.
На первом запущен эксплорер. На втором на весь экран открыт RDP клиент (mstsc.exe).
Нажимаю Alt+1 - попадаю на Default; Alt+2 - на Other.
Проблема в том, что когда mstsc.exe развернут на весь экран, он перехватывает все комбинации клавиш и отправляет их удаленному компьютеру. Поэтому я не попадаю обратно на Default, если жму Alt+1. Если вывести mstsc из полноэкранного режима - комбинации начинают работать.

Регистрировать Alt+1 я пробовал с помощью RegisterHotKey и с помощью WH_KEYBOARD_LL - результат один, комбинация не срабатывает.

К примеру, WinLogon как-то не дает перехватывать Ctrl+Alt+Del (и, кстати, тоже делает SwitchDesktop при нажатии), вот бы мне что-то подобное сделать для Alt+1.


 
Игорь Шевченко ©   (2013-06-01 00:50) [4]


> К примеру, WinLogon как-то не дает перехватывать Ctrl+Alt+Del


К примеру Ctrl+Alt+Del не дает перехватить не Winlogon, а ядро системы


 
Rouse_ ©   (2013-06-01 00:51) [5]


> Проблема в том, что когда mstsc.exe развернут на весь экран,
>  он перехватывает все комбинации клавиш и отправляет их
> удаленному компьютеру

Ясно, суть для себя прояснил.
Боюсь с RDP нужно бороться на её же уровне, из ядра.


 
Eraser ©   (2013-06-01 01:01) [6]


> Rouse_ ©   (01.06.13 00:51) [5]

да какое там ядро в клиенте то ) обычный LL хук влепили )


 
Rouse_ ©   (2013-06-01 01:09) [7]


> Eraser ©   (01.06.13 01:01) [6]
>
> > Rouse_ ©   (01.06.13 00:51) [5]
>
> да какое там ядро в клиенте то ) обычный LL хук влепили
> )

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


 
Eraser ©   (2013-06-01 01:12) [8]


> Rouse_ ©   (01.06.13 01:09) [7]

насчет блокирования - не изучал вопрос, но что клиент не на уровне ядра перехватывает клавишы это точно.


 
Rouse_ ©   (2013-06-01 01:16) [9]


> Eraser ©   (01.06.13 01:12) [8]
>
> > Rouse_ ©   (01.06.13 01:09) [7]
>
> насчет блокирования - не изучал вопрос, но что клиент не
> на уровне ядра перехватывает клавишы это точно.

Блин, так и хотел ответить старой детской: "чем докажешь"?
Ладно, давай пруфлинк :)


 
Eraser ©   (2013-06-01 01:46) [10]


> Rouse_ ©   (01.06.13 01:16) [9]
>

нету пруфлинка, косвенно на это указывает то, что win+L не перехватывается, CAD не перехватывается. вот, допустим, в VMWare, видимо, без драйвера не обошлось.


 
Дмитрий С ©   (2013-06-01 02:04) [11]

mstsc работает от имени обычного пользователя, таких пускают в ядро?)

Что делать то?


 
Дмитрий С ©   (2013-06-01 02:09) [12]


> К примеру Ctrl+Alt+Del не дает перехватить не Winlogon,
> а ядро системы

Win+L тоже?


 
Германн ©   (2013-06-01 02:19) [13]


> Eraser ©   (01.06.13 01:01) [6]

Вот наконец к обсуждению подключился специалист.

Дмитрий С ©
Тебе его надо терзать изо всех сил и применяя любые методы стимулирования!
:)


 
Eraser ©   (2013-06-01 02:45) [14]


> Германн ©   (01.06.13 02:19) [13]

да не, в плане понимания работы системы я лютый ламер по сравнению с Розычем, другое дело что работу конкретно данного софта хорошо представляю.


 
Rouse_ ©   (2013-06-01 03:03) [15]

Хм, а если Win+L просто передается наружу? Ну это я так размышляю - с планшета сложно проверить :)


 
Германн ©   (2013-06-01 03:44) [16]


> Eraser ©   (01.06.13 02:45) [14]
>
>
> > Германн ©   (01.06.13 02:19) [13]
>
> да не, в плане понимания работы системы я лютый ламер по
> сравнению с Розычем, другое дело что работу конкретно данного
> софта хорошо представляю.
>

А разве вопрос именно о системе? Разве тему а-ля RDP ты не изучил полностью?
Ну пусть не совсем полностью. Но хотя бы почти полностью.

Ну да. Если удалённый рабочий стол раскрыт на весь экран, то совершенно естественно, что все нажатия клавиш относятся именно к RDP. Но почему бы не оставить возможность иметь "горячие клавиши", которые работали бы в основной ОС?


 
Eraser ©   (2013-06-01 03:52) [17]


> Rouse_ ©   (01.06.13 03:03) [15]

просто его хуком нельзя перехватить, как и CAD. т.е. я не вижу в работе стандартного RDP клиента того, что нельзя было бы сделать обычными LL хуками.

> Германн ©   (01.06.13 03:44) [16]


> Разве тему а-ля RDP ты не изучил полностью?

RDP это всего лишь протокол, а исходный код клиента от MS никто не открывал и не собирается открывать, судя по всему )


 
robt5   (2013-06-01 11:06) [18]

странная идея однако, а поведение mstsc.exe вполне логичное и правильное
зачем 2й десктоп и зачем фулскрин? почему не сворачивать окно на основном десктопе?
кароче последний вариант это DirectInput, только там не перехват, а сам факт нажатия регистрируется, но mstsc.exe может как раз его и использует в эксклюзивном режиме при фуллскрине


 
Rouse_ ©   (2013-06-01 11:08) [19]


> Eraser ©   (01.06.13 03:52) [17]

Глянул сейчас поверхностно. Все достаточно просто в итоге.
За CAD, судя по монитору, отвечает окно "SAS Window class".
Суть перехвата сводится к сабкласингу оконной процедуры данного окна с целью перехвата сообщения WM_HOTKEY.
Это можно сделать двумя способами.
1. инжектированием в процесс winlogon и сабкласингом
2. реализации хука на сообщения WH_GETMESSAGE, а не на клавиатуру WH_KEYBOARD_LL

профит.


 
Rouse_ ©   (2013-06-01 11:19) [20]

а, ну и конечно классический сплайсинг на ProcessMessage в соответствующем процессе :)


 
Rouse_ ©   (2013-06-01 11:21) [21]

ой, на TranslateMessage, конечно :)))


 
Дмитрий С ©   (2013-06-01 13:49) [22]


> Rouse_ ©   (01.06.13 11:08) [19]

Любопытно. С инжектированием пока не буду пробовать, а вот с WH_GETMESSAGE попробую. Запишу все сообщения в файл, и попробую проанализировать.


 
Дмитрий С ©   (2013-06-01 13:55) [23]

Нет, кстати, готовой функции преобразующей WM_ANY_MESSAGE в "WM_ANY_MESSAGE"?


 
Eraser ©   (2013-06-01 14:02) [24]


> Rouse_ ©   (01.06.13 11:08) [19]

это на какой ОС?


 
Rouse_ ©   (2013-06-01 14:08) [25]

Смотрел на виртуалке на ХР, на семерке пока не могу. (Монитор долго разворачивать, он у меня "специфичный" :)


 
Eraser ©   (2013-06-01 14:11) [26]

начиная с Висты там совершенно по-другому все, гораздо печальнее. кстати, win+L в XP возможно и перехватывается хуком, не помню уже точно.


 
Eraser ©   (2013-06-01 14:13) [27]

просто у меня в свое время была задача несколько обратная - генерировать CAD под XP, а затем под висту и выше.


 
Rouse_ ©   (2013-06-01 14:19) [28]


> Eraser ©   (01.06.13 14:11) [26]
> начиная с Висты там совершенно по-другому все, гораздо печальнее.
>  кстати, win+L в XP возможно и перехватывается хуком, не
> помню уже точно.

Ок, проверю, но чутка попозже...
По результатам отпишусь.


 
Eraser ©   (2013-06-01 14:27) [29]

было бы круто, давно интересно как оно там изнутри сделано.


 
Rouse_ ©   (2013-06-01 15:04) [30]


> Eraser ©   (01.06.13 14:27) [29]

Ты кстати стукнись мне в аську плз, у меня к тебе тоже есть пару вопросов по твоей тематике.
170677708
Она у меня всегда включена, но на рабочем компе, т.е. активировать и ответить я тебе смогу не раньше понедельника.


 
Eraser ©   (2013-06-01 15:10) [31]


> Rouse_ ©   (01.06.13 15:04) [30]

постучу, правда сейчас под рукой аськи нет, постепенно от нее избавляюсь в пользу скайпа, если есть скайп - давай его.


 
Rouse_ ©   (2013-06-01 15:16) [32]

ну ты спросил, думаешь я его помню :)))
щас по удаленке попробую подключится, если пустит :)


 
Rouse_ ©   (2013-06-01 15:17) [33]

Ага, пустило. А зовут меня там оказывается "rouse_35" без кавычек :)


 
Eraser ©   (2013-06-01 15:21) [34]

отправил запрос.


 
Rouse_ ©   (2013-06-01 15:22) [35]

Угу, в понедельник отвечу.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2013.11.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.002 c
15-1370205002
Юрий
2013-06-03 00:30
2013.11.17
С днем рождения ! 3 июня 2013 понедельник


15-1370160003
Ихорь
2013-06-02 12:00
2013.11.17
А вот мог AGP-слот "подгореть"?


15-1369331388
Rouse_
2013-05-23 21:49
2013.11.17
Битая ревизия в hg mercurial


15-1370032202
Юрий
2013-06-01 00:30
2013.11.17
С днем рождения ! 1 июня 2013 суббота


15-1369751845
LDV
2013-05-28 18:37
2013.11.17
временный индекс по полю





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский