Здравствуйте, _sergius_, Вы писали:
__>Как реализовать горячие клавиши, если нет главного окна (например если это служба)?
написать отдельную прогу которая общается с сервисом, но сама им не явлаяется. и грузится в каждого пользователя (прям в мозг)
Re[2]: Горячие клавишы
От:
Аноним
Дата:
27.10.03 12:32
Оценка:
Здравствуйте, IPv6, Вы писали:
IP>Здравствуйте, _sergius_, Вы писали:
__>>Как реализовать горячие клавиши, если нет главного окна (например если это служба)?
IP>написать отдельную прогу которая общается с сервисом, но сама им не явлаяется. и грузится в каждого пользователя (прям в мозг)
К сожалению такой способ не подходит, должна быть только одна служба. Все равно спасибо за совет
Здравствуйте, _sergius_, Вы писали:
__>Как реализовать горячие клавиши, если нет главного окна (например если это служба)?
Создать вспомогательное окно, которое будет hidden. Кроме того, если это служба, то можно сделать так, что оно будет принадлежать другому Desktop`у (например: WinLogon). Тогда с его помощью можно будет и сообщения различные обрабатывать, если возникнет потребность.
... << RSDN@Home 1.1 beta 2 >>
Re[2]: Горячие клавишы
От:
Аноним
Дата:
27.10.03 14:07
Оценка:
Здравствуйте, Supervisor, Вы писали:
S>Здравствуйте, _sergius_, Вы писали:
__>>Как реализовать горячие клавиши, если нет главного окна (например если это служба)?
S>Создать вспомогательное окно, которое будет hidden. Кроме того, если это служба, то можно сделать так, что оно будет принадлежать другому Desktop`у (например: WinLogon). Тогда с его помощью можно будет и сообщения различные обрабатывать, если возникнет потребность.
Это не прокатит, горячие клавиши работают лишь в перделах десктопа в котором зарегистрированы. кажется
Здравствуйте, _sergius_, Вы писали:
s> Как реализовать горячие клавиши, если нет главного окна (например если s> это служба)?
Если у твоего потока нет цикла выборки сообщений — то только поллировать GetAsyncKeyState (идиотский способ — не рекомендуется). Если же есть, то RegisterHotKey.
-- Всего хорошего!
-- Alex Alexandrov, e-mail: alex_alexandrov@fromru.com
Posted via RSDN NNTP Server 1.8 beta
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, kol_bok, Вы писали:
_>Здравствуйте, _sergius_, Вы писали:
__>>Как реализовать горячие клавиши, если нет главного окна (например если это служба)?
_>Попробуй DirectInput , только не будет работать на голой 95-й винде ( без DX) на остальных будет. _>Зато никаких жуков хуков...
Кстати в 95-м помоему как раз служб то и нету...
а на NT directx присутствует начиная с NT4.0 (DirectX 3)
Здравствуйте, kol_bok, Вы писали:
_>Попробуй DirectInput , только не будет работать на голой 95-й винде ( без DX) на остальных будет. _>Зато никаких жуков хуков...
Ну конечно . DirectInput он direct только для джойстиков.
Для мышки и клавы это и есть SetWindowsHookEx(WH_KEYBOARD_LL/WH_MOUSE_LL)
И в 100% случаев это будет проще. Сампл есть в MSDN, ищите
"Using Windows XP Visual Styles and PrintWindow in Windows Applications"
Здравствуйте, Блудов Павел, Вы писали:
БП> БП> Ну конечно . DirectInput он direct только для джойстиков. БП> БП> Для мышки и клавы это и есть БП> SetWindowsHookEx(WH_KEYBOARD_LL/WH_MOUSE_LL) И в 100% случаев это будет БП> проще. Сампл есть в MSDN, ищите БП> БП> "Using Windows XP Visual Styles and PrintWindow in Windows БП> Applications"
Так а все-таки: чем RegisterHotKey не устраивает?
-- Всего хорошего!
-- Alex Alexandrov, e-mail: alex_alexandrov@fromru.com
Posted via RSDN NNTP Server 1.8 beta
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, alexandrov_alex, Вы писали:
_>Так а все-таки: чем RegisterHotKey не устраивает?
_>-- Всего хорошего! _>-- Alex Alexandrov, e-mail: alex_alexandrov@fromru.com
Потому что в RegisterHotKey первый параметр хэндл окна, а у меня нет окна (служба)
Здравствуйте, antx, Вы писали:
A>Здравствуйте, _sergius_, Вы писали:
__>>Как реализовать горячие клавиши, если нет главного окна (например если это служба)?
A>хук поставить)
Хук не подходит, так как кроме моего exe больше ничего не должно быть. А для того чтобы поставить хук (глобальный) нужна еще dll'ка
Здравствуйте, Блудов Павел, Вы писали:
БП>Здравствуйте, kol_bok, Вы писали:
_>>Попробуй DirectInput , только не будет работать на голой 95-й винде ( без DX) на остальных будет. _>>Зато никаких жуков хуков...
БП>Ну конечно . DirectInput он direct только для джойстиков.
Бжди...а как же GetKeyboardState и GetMouse...
Сам юзал, работает и для клавы и мыши...совсем немного инициализации + децл кода в результате имеем
в любой момент времени массив состояния всех кнопок клавы ( нажата или отжата ) ...
потом проверяем
if (KeyStates[DIK_F1]>0)and(KeyStates[DIK_CTRLLEFT]>0) then
MakeSex();
БП>Для мышки и клавы это и есть SetWindowsHookEx(WH_KEYBOARD_LL/WH_MOUSE_LL) БП>И в 100% случаев это будет проще. Сампл есть в MSDN, ищите
БП>"Using Windows XP Visual Styles and PrintWindow in Windows Applications"
БП>Павел.
Здравствуйте, _sergius_, Вы писали:
s> Потому что в RegisterHotKey первый параметр хэндл окна, а у меня нет s> окна (служба)
Вы меня удивляете, молодой человек. Вы документацию как читаете?
hWnd
[in] Handle to the window that will receive WM_HOTKEY messages generated by the hot key. If this parameter is NULL, WM_HOTKEY messages are posted to the message queue of the calling thread and must be processed in the message loop.
Кто же мешает отдать NULL в качестве дескриптора и ловить сообщения с hWnd равным NULL? Я не хочу сказать, что я так делал, но должно работать. Другое дело, что вообще пытаться управлять сервисом непосредственно с клавиатуры является в корне неверным подходом, но это уже как-то обсуждалось, повторяться не буду.
-- Всего хорошего!
-- Alex Alexandrov, e-mail: alex_alexandrov@fromru.com
Posted via RSDN NNTP Server 1.8 beta
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, kol_bok, Вы писали:
_>Предлагаю Холодными Клавишами назвать клавиши или сочетание нажатие которых не обрабатывается ни одной программой.\
У меня на клаве есть такая. Справа от индикаторов. Нп ней нарисован треугольник.
Ни одна прога не обрабатывает. Хотя хуком нажатия отлавливаются. Сканкод 0х00.
Здравствуйте, _sergius_, Вы писали:
__>Хук не подходит, так как кроме моего exe больше ничего не должно быть. А для того чтобы поставить хук (глобальный) нужна еще dll'ка
Только не для WH_KEYBOARD_LL и WH_MOUSE_LL. Для них нужно только чтобы нить их поставившая имела
цикл выборки сообщений. Как, впрочем, и для ::RegisterHotKey().
Здравствуйте, alexandrov_alex, Вы писали:
_>Вы меня удивляете, молодой человек. Вы документацию как читаете?
_>
_>hWnd
_>[in] Handle to the window that will receive WM_HOTKEY messages generated by the hot key. If this parameter is NULL, WM_HOTKEY messages are posted to the message queue of the calling thread and must be processed in the message loop.
_>Кто же мешает отдать NULL в качестве дескриптора и ловить сообщения с hWnd равным NULL? Я не хочу сказать, что я так делал, но должно работать. Другое дело, что вообще пытаться управлять сервисом непосредственно с клавиатуры является в корне неверным подходом, но это уже как-то обсуждалось, повторяться не буду.
Вы меня тоже удивляете . Вы всегда верите тому что написано в MSDN? Могу привести массу примеров, когда написанное не отвечает реальности.
Так вот, если не знаете, то лучше не говорите, а попробуйте на практике. Говорить все умеют.