Форум: "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.zipAPPCOMMAND_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