Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизМультимедийная клава Найти похожие ветки
← →
Sulimxar © (2004-03-06 00:32) [0]Привет
Хочу задать этакий ЭКЗОТИЧЕСКИЙ вопросик.
(На ответ трудно надеятся еще и потому, что редкий
гурман дочитает этот вопрос до конца:)
Кому приходилось работать с мультимедийной
клавой (ну там кнопочки плей, некст и тд),
будьте любезны просветить по поводу:
Моя задача - поставить глобальную хоткей
на кнопку Play этой самой клавы.
Я испытал два варианта:
1)регистрировать хоткей у винды:
RegisterHotKey(frmMain.Handle, // моя форма
id_MPlayPause, // некий глобпльный код hotkey
0 ,
179{код кнопки Play});
-работает для чего угодно, но только не для мультимедийных
клавиш :(?
2) Тогда я поставил хук:
Процедура перехвата:
Function KeyboardHook(Code: Integer; ParamW: WPARAM; ParamL: LPARAM):
LRESULT;stdcall;
Begin
If Code IN [HC_ACTION, HC_NOREMOVE] Then
Begin
// Посылка сообщения форме моего приложения
Result := SendMessage(ShareInf^.AppWndHandle, WM_USER, ParamW, Code);
// Получили результат обработки сообщения...
End;
// ... и если он 0 - то пересылаем сообщение дальше
if Result = 0 then
Result := CallNextHookEx(ShareInf^.OldHookHandle, Code , ParamW, ParamL);
End;
В программе стоит код обработки:
Procedure TfrmMain.WMUser(var Message: TMessage);
var
NewCod: integer;
Begin
NewCod := Message.WParam;
if NewCod = 179 then
begin
Play;
Message.Result := -1; // Если мултимедийный Play - результат сообщения не 0
end
end;
Таким образом я перехватываю сообщение с кодом 179(мултимедийный Play), и не
пересылаю его другим претендентам.
Вроде всё замечательно... но!
Да при нажатии этой самой Play - мое приложение адекватно реагирует на сообщение,
но при этом (вот ведь облом) - открывается Windows Media Player,
его Величество, блин... Который мне и даром не нужен :(
Мои дальнейшие исследования выявили следующие любопытности:
-При нажатии мультимедийных кнопок - генерируется только одно сообщение
(а не два как для кнопки F12 например (по "кнопка вниз/кнопка вверх")(почему?)
-Сообщение от мультимедийной кнопки перехватывается кроме моей проги
также winamp-ом и WMP, игнорируя мой фильтр (почему?) (подчеркиваю, что
для других кодов (немультимедийных)- сообщения таки фильтруются)
-Если открыт Winamp - нажатие кнопки Play на клаве открытие WMP не вазывает
(а может вызывает но winamp его тут же закрывает?:))
А может есть вообще какой способ попроще решить мою задачку
Помогите кто чем сможет
← →
МАКСЮХА © (2004-03-06 15:09) [1]Была б такая клава...
← →
Sulimxar © (2004-03-06 19:45) [2]Да у меня её тоже нет :)
Тестирую у товарища
← →
Soft © (2004-03-06 20:02) [3]http://newff.narod.ru/pascal/uekd.rar
← →
Sulimxar © (2004-03-06 23:40) [4]Дело в том, что я
использую впринципе тот же код
для установки и обработки хука.
Но на клаве уже стоит видимо свой
драйвер (те калькулятор, Excel и тд запускаются сами
без проблем).
А Winamp 3 - похоже и сам научился обрабатывать такую
клаву.
Кстати коды клавиш на моей клаве получаются другие.
Проблема в том, что с кнопкой Play запускается
WindowsMediaPlayer. Вот как прекратить это безобразие?
Каждый раз при нажатии кнопки Play искать и закрывать
WMP? - как-то кривовато... Как с этим справляется Winamp?
← →
GrayFace © (2004-03-07 11:11) [5]Просто прога(не думаю что драйвер) твоей клавы смотрит, есть ли Winamp. Прога моей клавы игнорирует Winamp, но зато не запускает WMP. А еще если в explorer"е навести на музыкальный файл и нажать play она откроет его в WMP! Так что прогрммисты мультимедийных клав способны гораздо здвинутее любого психбольного. Засунь Winamp в автозапуск и не парься.
← →
Diamond Cat © (2004-03-07 15:35) [6]может твой хук стоит ниже в цепочке хуков?
← →
Sulimxar © (2004-03-07 16:44) [7]
> Засунь Winamp в автозапуск и не парься.
Так дело в том, что мне Winamp как раз и не нужен.
Мне свою прогу надо научить!
> может твой хук стоит ниже в цепочке хуков?
А как это проверить/исправить?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.032 c