Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.035 c
4-1078230208
AloneAli
2004-03-02 15:23
2004.05.02
Мигание в System Tray


3-1080810273
clickmaker
2004-04-01 13:04
2004.05.02
ADO->MIDAS->ClientDataSet не пашет фильтр по BooleanField


3-1080988684
race1
2004-04-03 14:38
2004.05.02
integer overflow в гриде


1-1081997359
an-na2002
2004-04-15 06:49
2004.05.02
лишняя пустая строка


14-1081833297
Vlad Oshin
2004-04-13 09:14
2004.05.02
Не поможите найти драйвер для AIC7895p(SCSI) под Win2000?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский