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

Вниз

key_event   Найти похожие ветки 

 
pomashok   (2004-12-18 22:37) [0]

Привет!Подскажите как послать сообщение от "Мультимедийной" клавиши скажем "PLAY" ?
SendMessage...?


 
Piter ©   (2004-12-19 01:26) [1]

лично я ничего не понял


 
pomashok   (2004-12-19 20:47) [2]

хачу свой прогой управлять WMP (Play/Stop и тд...)
в MSDN
Syntax

WM_APPCOMMAND

   WPARAM wParam
   LPARAM lParam;
   
Parameters

wParam
Handle to the window where the user clicked the button or pressed the key. This can be a child window of the window receiving the message. For more information about processing this message, see the Remarks section.
lParam
Use the following code to get the information contained in the lParam parameter.
cmd  = GET_APPCOMMAND_LPARAM(lParam);

uDevice = GET_DEVICE_LPARAM(lParam);

dwKeys = GET_KEYSTATE_LPARAM(lParam);

================
APPCOMMAND_MEDIA_PLAY_PAUSE
Play or pause playback. If there are discrete Play and Pause buttons, applications should take action on this command as well as APPCOMMAND_MEDIA_PLAY and APPCOMMAND_MEDIA_PAUSE.
APPCOMMAND_MEDIA_PREVIOUSTRACK
Go to previous track.
=======================
но как терь это все в кучу связать?


 
Piter ©   (2004-12-20 00:14) [3]

pomashok   (19.12.04 20:47) [2]
хачу


научитесь говорить по русски :)

но как терь это все в кучу связать?

что связать то? Ты привел выдержки их хелпа какие-то - зачем они мне? Обстоятельно расскажи что имеешь, что хочешь сделать. Подробно. Как можно подробнее.
Ну и также что пытался сделать, с примером кода, что не получилось.


 
pomashok   (2004-12-20 00:27) [4]

хачу в своей проге сделать кнопочку (которая скажем включала в WMP "PLAY"), значит в обработчике события кнопки необходимо сгенерировать эмуляцию нажатия кнопки "PLAY" мультимедийной клавиши клавиатуры!!!
из MSDN известно что необходимо сделать это через WM_APPCOMMAND
!!!
APPCOMMAND_MEDIA_PLAY  - параметр отвечающий за воспроизведение!(см.выше)

SendMessage(Application.Handle, // хендл проги ... тока по ходу нада хендл WMP :\
           WM_APPCOMMAND,
           APPCOMMAND_MEDIA_PLAY,  // Lparam
           0 //WParam
           );


 
pomashok   (2004-12-20 19:48) [5]

и фсе к тому же ... дайте хоть ссылочку !а то в тупике


 
GuAV ©   (2004-12-20 20:09) [6]

Константы, полученные обработкой WM_KEYDOWN:

const
 VK_PLAYPAUSE = $000000B3; //  play/pause
 VK_STOP      = $000000B2; //  stop
 VK_FORWARD   = $000000B0; //  >>
 VK_BACK      = $000000B1; //  <<


 
pomashok   (2004-12-20 20:33) [7]

GuAV © работает! но напрашивается другой вопрос как быть с остальными кнопками мультимедийной клавы...?
как получить их константы?
и фсе же как работать WM_APPCOMMAND ???????


 
ECM ©   (2004-12-20 21:05) [8]

Сказать три раза подряд "хАчу" ....:)


 
pomashok   (2004-12-20 21:13) [9]

натолкните на мысль что ли .... готовый код не прошу ... очень хочется допетрить ;)


 
pomashok   (2004-12-20 22:52) [10]

if(message == WM_APPCOMMAND)
{
 switch(GET_APPCOMMAND_LPARAM(lParam))
 {
 case APPCOMMAND_MEDIA_NEXTTRACK:
   // do something, which skips the track
   return 1;
 case APPCOMMAND_MEDIA_PREVIOUSTRACK:
   // do something...
   return 1;
 case APPCOMMAND_MEDIA_STOP:
   // do something, which stops playing
   return 1;
 case APPCOMMAND_MEDIA_PLAY_PAUSE:
   // toggle between play and pause
   return 1;
 }
}
// handle other messages or call default window proc.
...


как эту сишный код перевести в delphi ?


 
Piter ©   (2004-12-20 23:02) [11]

Имхо, так:

if message = WM_APPCOMMAND then
 case GET_APPCOMMAND_LPARAM(lParam) of
   APPCOMMAND_MEDIA_NEXTTRACK:
     // do something, which skips the track
   APPCOMMAND_MEDIA_PREVIOUSTRACK
     // do something...
   ...
 else
   // handle other messages or call default window proc


 
GuAV ©   (2004-12-20 23:06) [12]

pomashok   (20.12.04 20:33) [7]
как получить их константы?


или скачать файлы где они прописаны. Например: ftp://delphi-jedi.org/api/win32api.zip - SDK файлы переведенные в Delphi.

или написать программу отлавливающую WM_KEYDOWN и записывающую/отображающую wParam, затем понажимать эти клавиши.

>WM_APPCOMMAND
>APPCOMMAND_MEDIA_PREVIOUSTRACK


Уже достаточно информации для поиска в msdn / в google, не так ли ?

PS: как раз сегодня написал плагин к винампу чтоб эти из [6] работали откуда угодно.


 
GuAV ©   (2004-12-20 23:08) [13]

Piter ©   (20.12.04 23:02) [11]


Не-а


if message = WM_APPCOMMAND then
case GET_APPCOMMAND_LPARAM(lParam) of
  APPCOMMAND_MEDIA_NEXTTRACK:
    begin
      // do something, which skips the track
      Result := 1;
      Exit;
    end;
...



 
Piter ©   (2004-12-20 23:34) [14]

GuAV ©   (20.12.04 23:08) [13]
Exit;


а почему Exit? Return в C прерывает функцию?


 
GuAV ©   (2004-12-20 23:46) [15]

2 Piter ©  

Из MSDN:
The return statement terminates the execution of a function and returns control to the calling function (or, in the case of the main function, transfers control back to the operating system).


 
Piter ©   (2004-12-21 00:16) [16]

ну в общем, я правильно подумал то...


 
GuAV ©   (2004-12-21 00:54) [17]

Piter ©   (21.12.04 0:16) [16]
я правильно подумал то...


насчёт того что

> Return в C прерывает функцию

- да. Кстати я тоже С не знаю :)


 
pomashok   (2004-12-21 21:22) [18]

неработает.....;(


 
Просто Джо ©   (2004-12-22 13:10) [19]

...и не надо

8()


 
pomashok   (2004-12-22 21:30) [20]

ничего не получается... какие еще мысли есть ?


 
GuAV ©   (2004-12-22 21:55) [21]

pomashok   (19.12.04 20:47) [2]
cmd  = GET_APPCOMMAND_LPARAM(lParam);


function GET_APPCOMMAND_LPARAM(lParam: LPARAM): Shortint;
begin
 Result := Shortint(HIWORD(lParam) and not FAPPCOMMAND_MASK);
end;

Т.е. чтоб писать APPCOMMAND_ХХХХ в lParam надо эти константы shl 16.


 
pomashok   (2004-12-22 22:18) [22]

GuAV © т.е. создаем function....
Т.е. чтоб писать APPCOMMAND_ХХХХ в lParam надо эти константы shl 16. APPCOMMAND_ХХХХ - это имеется ввиду APPCOMMAND_MEDIA_PLAY ну и д.р.? а где писать не совсем понял...


 
GuAV ©   (2004-12-22 23:21) [23]

2 pomashok   (22.12.04 22:18) [22]
> а где писать не совсем понял...

Перечитай внимательно pomashok   (19.12.04 20:47) [2]


 
pomashok   (2004-12-24 22:15) [24]

ссылку киньте толковую какую нить...


 
GuAV ©   (2004-12-24 23:53) [25]

Правильная ссылка уже была у тебя, сужу по [2].

SendMessage(FindWindow("WMPlayerApp", nil), WM_APPCOMMAND, 0, APPCOMMAND_MEDIA_PLAY_PAUSE shl 16);


 
pomashok   (2004-12-26 01:09) [26]

procedure TForm1.Button5Click(Sender: TObject);
begin
SendMessage(FindWindow("WMPlayerApp", nil),
           WM_APPCOMMAND,
           0,
           APPCOMMAND_MEDIA_PLAY_PAUSE shl 16); // здесь выдает ошибку
end;

выдает ошибку!
GuAV © [6]
откуда брать константы shl 16 ? ссылочку или кусок кода ;)
все таки хотелось бы добить этот вопрос!я думаю он многих интересует...


 
Piter ©   (2004-12-26 01:54) [27]

pomashok   (26.12.04 1:09) [26]
откуда брать константы shl 16 ?


:)))))))))))))))))


 
GuAV ©   (2004-12-26 02:05) [28]

pomashok   (26.12.04 1:09) [26]
откуда брать константы shl 16 ?


:-)


>GuAV ©   (20.12.04 23:06) [12]
>pomashok   (20.12.04 20:33) [7]
>как получить их константы?
>
> или скачать файлы где они прописаны. Например:
> ftp://delphi-jedi.org/api/win32api.zip - SDK файлы
>переведенные в Delphi.
>
> или написать программу отлавливающую WM_KEYDOWN и
> записывающую/отображающую wParam, затем понажимать эти
> клавиши.


 
GuAV ©   (2004-12-26 02:13) [29]

В смысле по предыдущему ответу надо обрабатывать уже не WM_KEYDOWN, а WM_APPCOMMAND.

Вот кчтати фрагмент из ftp://delphi-jedi.org/api/win32api.zip
 APPCOMMAND_BROWSER_BACKWARD    = 1;
 {$EXTERNALSYM APPCOMMAND_BROWSER_BACKWARD}
 APPCOMMAND_BROWSER_FORWARD     = 2;
 {$EXTERNALSYM APPCOMMAND_BROWSER_FORWARD}
 APPCOMMAND_BROWSER_REFRESH     = 3;
 {$EXTERNALSYM APPCOMMAND_BROWSER_REFRESH}
 APPCOMMAND_BROWSER_STOP        = 4;
 {$EXTERNALSYM APPCOMMAND_BROWSER_STOP}
 APPCOMMAND_BROWSER_SEARCH      = 5;
 {$EXTERNALSYM APPCOMMAND_BROWSER_SEARCH}
 APPCOMMAND_BROWSER_FAVORITES   = 6;
 {$EXTERNALSYM APPCOMMAND_BROWSER_FAVORITES}
 APPCOMMAND_BROWSER_HOME        = 7;
 {$EXTERNALSYM APPCOMMAND_BROWSER_HOME}
 APPCOMMAND_VOLUME_MUTE         = 8;
 {$EXTERNALSYM APPCOMMAND_VOLUME_MUTE}
 APPCOMMAND_VOLUME_DOWN         = 9;
 {$EXTERNALSYM APPCOMMAND_VOLUME_DOWN}
 APPCOMMAND_VOLUME_UP           = 10;
 {$EXTERNALSYM APPCOMMAND_VOLUME_UP}
 APPCOMMAND_MEDIA_NEXTTRACK     = 11;
 {$EXTERNALSYM APPCOMMAND_MEDIA_NEXTTRACK}
 APPCOMMAND_MEDIA_PREVIOUSTRACK = 12;
 {$EXTERNALSYM APPCOMMAND_MEDIA_PREVIOUSTRACK}
 APPCOMMAND_MEDIA_STOP          = 13;
 {$EXTERNALSYM APPCOMMAND_MEDIA_STOP}
 APPCOMMAND_MEDIA_PLAY_PAUSE    = 14;
 {$EXTERNALSYM APPCOMMAND_MEDIA_PLAY_PAUSE}
 APPCOMMAND_LAUNCH_MAIL         = 15;
 {$EXTERNALSYM APPCOMMAND_LAUNCH_MAIL}
 APPCOMMAND_LAUNCH_MEDIA_SELECT = 16;
 {$EXTERNALSYM APPCOMMAND_LAUNCH_MEDIA_SELECT}
 APPCOMMAND_LAUNCH_APP1         = 17;
 {$EXTERNALSYM APPCOMMAND_LAUNCH_APP1}
 APPCOMMAND_LAUNCH_APP2         = 18;
 {$EXTERNALSYM APPCOMMAND_LAUNCH_APP2}
 APPCOMMAND_BASS_DOWN           = 19;
 {$EXTERNALSYM APPCOMMAND_BASS_DOWN}
 APPCOMMAND_BASS_BOOST          = 20;
 {$EXTERNALSYM APPCOMMAND_BASS_BOOST}
 APPCOMMAND_BASS_UP             = 21;
 {$EXTERNALSYM APPCOMMAND_BASS_UP}
 APPCOMMAND_TREBLE_DOWN         = 22;
 {$EXTERNALSYM APPCOMMAND_TREBLE_DOWN}
 APPCOMMAND_TREBLE_UP           = 23;
 {$EXTERNALSYM APPCOMMAND_TREBLE_UP}
 APPCOMMAND_MICROPHONE_VOLUME_MUTE = 24;
 {$EXTERNALSYM APPCOMMAND_MICROPHONE_VOLUME_MUTE}
 APPCOMMAND_MICROPHONE_VOLUME_DOWN = 25;
 {$EXTERNALSYM APPCOMMAND_MICROPHONE_VOLUME_DOWN}
 APPCOMMAND_MICROPHONE_VOLUME_UP   = 26;
 {$EXTERNALSYM APPCOMMAND_MICROPHONE_VOLUME_UP}
 APPCOMMAND_HELP                   = 27;
 {$EXTERNALSYM APPCOMMAND_HELP}
 APPCOMMAND_FIND                   = 28;
 {$EXTERNALSYM APPCOMMAND_FIND}
 APPCOMMAND_NEW                    = 29;
 {$EXTERNALSYM APPCOMMAND_NEW}
 APPCOMMAND_OPEN                   = 30;
 {$EXTERNALSYM APPCOMMAND_OPEN}
 APPCOMMAND_CLOSE                  = 31;
 {$EXTERNALSYM APPCOMMAND_CLOSE}
 APPCOMMAND_SAVE                   = 32;
 {$EXTERNALSYM APPCOMMAND_SAVE}
 APPCOMMAND_PRINT                  = 33;
 {$EXTERNALSYM APPCOMMAND_PRINT}
 APPCOMMAND_UNDO                   = 34;
 {$EXTERNALSYM APPCOMMAND_UNDO}
 APPCOMMAND_REDO                   = 35;
 {$EXTERNALSYM APPCOMMAND_REDO}
 APPCOMMAND_COPY                   = 36;
 {$EXTERNALSYM APPCOMMAND_COPY}
 APPCOMMAND_CUT                    = 37;
 {$EXTERNALSYM APPCOMMAND_CUT}
 APPCOMMAND_PASTE                  = 38;
 {$EXTERNALSYM APPCOMMAND_PASTE}
 APPCOMMAND_REPLY_TO_MAIL          = 39;
 {$EXTERNALSYM APPCOMMAND_REPLY_TO_MAIL}
 APPCOMMAND_FORWARD_MAIL           = 40;
 {$EXTERNALSYM APPCOMMAND_FORWARD_MAIL}
 APPCOMMAND_SEND_MAIL              = 41;
 {$EXTERNALSYM APPCOMMAND_SEND_MAIL}
 APPCOMMAND_SPELL_CHECK            = 42;
 {$EXTERNALSYM APPCOMMAND_SPELL_CHECK}
 APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE = 43;
 {$EXTERNALSYM APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE}
 APPCOMMAND_MIC_ON_OFF_TOGGLE      = 44;
 {$EXTERNALSYM APPCOMMAND_MIC_ON_OFF_TOGGLE}
 APPCOMMAND_CORRECTION_LIST        = 45;
 {$EXTERNALSYM APPCOMMAND_CORRECTION_LIST}
 APPCOMMAND_MEDIA_PLAY             = 46;
 {$EXTERNALSYM APPCOMMAND_MEDIA_PLAY}
 APPCOMMAND_MEDIA_PAUSE            = 47;
 {$EXTERNALSYM APPCOMMAND_MEDIA_PAUSE}
 APPCOMMAND_MEDIA_RECORD           = 48;
 {$EXTERNALSYM APPCOMMAND_MEDIA_RECORD}
 APPCOMMAND_MEDIA_FAST_FORWARD     = 49;
 {$EXTERNALSYM APPCOMMAND_MEDIA_FAST_FORWARD}
 APPCOMMAND_MEDIA_REWIND           = 50;
 {$EXTERNALSYM APPCOMMAND_MEDIA_REWIND}
 APPCOMMAND_MEDIA_CHANNEL_UP       = 51;
 {$EXTERNALSYM APPCOMMAND_MEDIA_CHANNEL_UP}
 APPCOMMAND_MEDIA_CHANNEL_DOWN     = 52;
 {$EXTERNALSYM APPCOMMAND_MEDIA_CHANNEL_DOWN}

 FAPPCOMMAND_MOUSE = $8000;
 {$EXTERNALSYM FAPPCOMMAND_MOUSE}
 FAPPCOMMAND_KEY   = 0;
 {$EXTERNALSYM FAPPCOMMAND_KEY}
 FAPPCOMMAND_OEM   = $1000;
 {$EXTERNALSYM FAPPCOMMAND_OEM}
 FAPPCOMMAND_MASK  = $F000;
 {$EXTERNALSYM FAPPCOMMAND_MASK}

function GET_APPCOMMAND_LPARAM(lParam: LPARAM): Shortint;
{$EXTERNALSYM GET_APPCOMMAND_LPARAM}

function GET_DEVICE_LPARAM(lParam: LPARAM): WORD;
{$EXTERNALSYM GET_DEVICE_LPARAM}

function GET_MOUSEORKEY_LPARAM(lParam: LPARAM): WORD;
{$EXTERNALSYM GET_MOUSEORKEY_LPARAM}

function GET_FLAGS_LPARAM(lParam: LPARAM): Integer;
{$EXTERNALSYM GET_FLAGS_LPARAM}

function GET_KEYSTATE_LPARAM(lParam: LPARAM): Integer;
{$EXTERNALSYM GET_KEYSTATE_LPARAM}



 
pomashok   (2004-12-26 02:36) [30]

SendMessage(FindWindow("WMPlayerApp", nil),
         WM_APPCOMMAND, 0, 46 );
так не работает...


 
GuAV ©   (2004-12-26 02:41) [31]

pomashok   (26.12.04 2:36) [30]
SendMessage(FindWindow("WMPlayerApp", nil),
        WM_APPCOMMAND, 0, 46 shl 16);


 
pomashok   (2004-12-26 03:21) [32]

ОГРОМНОЕ спасибо! работает ;)
1.еще вопросик по ходу... если приложение которое мы FindWindow находиться в трее, срабатывать фсиравно будет?
2. если я хачу выполнить APPCOMMAND_VOLUME_MUTE         = 8;
 но не в WMP ... как непосредственно обратиться к той части которая отвечает за ЗВУК ?(приложение или что то в этом роде...типа "ОБЩАЯ ГРОМКОСТЬ" нах в трее)


 
GuAV ©   (2004-12-26 13:31) [33]

2. если я хачу выполнить APPCOMMAND_VOLUME_MUTE         = 8;

If a child window does not process this message and instead calls DefWindowProc, DefWindowProc will send the message to its parent window. If a top level window does not process this message and instead calls DefWindowProc, DefWindowProc will call a shell hook with the hook code equal to HSHELL_APPCOMMAND.

т.е. судя по этому сообщение отправлять себе или HWND_DESKTOP. Проверить не могу, т.к. у меня win98, и это сообщение не поддерживается.


 
pomashok   (2004-12-26 14:15) [34]

GuAV ©  [33]
APPCOMMAND_VOLUME_MUTE         = 8; это я выполнил таким образом SendMessage(FindWindow(PChar("SystemTray_Main"),nil),WM_APPCOMMAND,0,8 shl 16);  // MUTE еще поддерживает Volum UP/Down
а к остальным я подобраться не могу.
нада чет через waveOutSetVolume ... но как  пока что не получается ....

т.е. судя по этому сообщение отправлять себе или HWND_DESKTOP. Проверить не могу, т.к. у меня win98, и это сообщение не поддерживается.

я не большой программер... поэтому неособо понимаю кусочки кода :(


 
Piter ©   (2004-12-26 15:21) [35]

GuAV ©   (26.12.04 13:31) [33]
т.к. у меня win98


???? GuAV! Как ты можешь в ней работать...


 
GuAV ©   (2004-12-26 15:32) [36]

Piter ©   (26.12.04 15:21) [35]

Знаешь, вопрос нужно ставить по - другому:

Как я могу юзать в ней MF !?

Ибо с остальным: Delphi, MSDN Library, Word, Excel, IE, etc - никаких проблем.


 
Piter ©   (2004-12-26 18:06) [37]

GuAV ©   (26.12.04 15:32) [36]
Как я могу юзать в ней MF !?


Да, я слышал о проблемах с MF в win98... ну а что я могу поделать? Я даже не знаю в чем причина...



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

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

Наверх




Память: 0.56 MB
Время: 0.042 c
4-1104059945
pomashok
2004-12-26 14:19
2005.02.13
управление громкостью


1-1106730908
Aln
2005-01-26 12:15
2005.02.13
Можно ли сделать задержку, не используя таймер?


1-1106825905
Antonn
2005-01-27 14:38
2005.02.13
Заменить ресурс в Dll


14-1106479264
Чеширский_Кот
2005-01-23 14:21
2005.02.13
Нужна фотография Шевченки


1-1106812672
Russko
2005-01-27 10:57
2005.02.13
Проблема с MDI приложением





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