Есть ли готовые хидеры для управления плеером (играть, пауза, далее) типа мультимедийных клавиш? Хочу сделать дистанционное управление плеером на CGI.
Я предполагал, что мультимидийные клавиши через драйвер посылают какие то стандартизированные команды, т.к. на клаве не пушут каким конкретно плеером могут управлять клавиши. Я заблуждаюсь?
Qb1024 я думаю да. У winamp -а например есть своя документация и спецовые заголовочные файлики в которых описано какие сообщения окну нужно посылать для управления проигрывателем. Там все просто... Ну а по поводу других плееров хз, но уверен что есть что-то подобное у них
у AIMPa тоже есть SDK, только не такое крутое , как у WinAmpa. У меня знакомый как раз пишет плагинчег под него. Скорее всего, это только для WMP
В том то и дело, что подобные клавиши управляют ВСЕМИ мультимедийными приложениями, которые находятся в фокусе (а некоторыми независимо от фокуса). И это при том, что я вообще убрал WMP из системы. Подскажите где найти упомянутые хидеры для винампа с документацией на русском языке?
2 Qb1024 ты программированием занялся а не бальными танцами документации на русском языке просто не существует. то что есть в интернете это любительские переводы. так же в нете можно найти схожие статьи по теме, собрать все в кучу и разобраться ты пробовал искать? http://dev.winamp.com/wiki/SDK_Contents http://delphiblog.ru/2007/winamp-programming тебе должно быть стыдно! я потратил меньше минуты
Gar|k, dev.winamp.com я находил, но сайт не открылся. А на другом сайте описано применение на делфи, а я не на столько хорошо знаю C++, чтобы легко переписать код под C++. Именно поэтому я и попросил помощи.
Хорошо, тогда задам немного другой вопрос: как в консольном приложении на C++ найти окно по заголовку и отправить ему сообщение? В инете на данный вопрос полно кода только на делфи. Единственое, что нашёл это: Code: HWND hwndWinamp = FindWindow("Winamp v1.x",NULL);
http://msdn.microsoft.com/ru-ru/library/ms633499.aspx http://msdn.microsoft.com/ru-ru/library/ms644950.aspx Code: #include <window.h> // тут подключи нужные заголовки SDK winapm int main(void) { HWND hWinamp=FindWindow(NULL,"Winamp 5.581"); if(hWinamp==NULL) return 0; SendMessage(hWinamp,...,...); // тут читай SDK какие команды зачем return 1; } Но так как заголовки окна разные могут быть я бы тебе посоветовал сначала заюзать EnumWindows, а в callback функции получать GetWindowText и находить там строку Winamp если есть значит return FALSE - закончить поиск
Возникло несколько ошибок: 1) #include <window.h> не катит, пошло только #include <windows.h> 2) При компиляции ругается на Code: FindWindow(NULL,"Winamp 5.581");
keen6 все же лучше использовать UNICODE так как один фиг все ядро на нем построено начиная с NT. Так что FindWindow(NULL,L"Winamp 5.581"); или #include <tchar.h> ... FindWindow(NULL,_TEXT("Winamp 5.581")); 2 Qb1024 код я тебе от балды писал. tchar это спецовый тип как раз введенный для заморочек с кодировками. http://msdn.microsoft.com/ru-ru/library/c426s321.aspx
Команды любому плееру с помощью мм клавиш легко делать (если плеер понимает эти клавиши) Code: INPUT mminp; memset(&mminp, 0, sizeof(INPUT)); // Нажимаем кнопку следующий трэк mminp.type = INPUT_KEYBOARD; mminp.ki.wVk = VK_MEDIA_NEXT_TRACK; SendInput(1, &mminp, sizeof(INPUT)); // Держим 0.1 секунду Sleep(100); // Отпускаем кнопку mminp.ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1, &mminp, sizeof(INPUT)); Если надо, коды клавиш: Code: #define VK_VOLUME_MUTE 0xAD #define VK_VOLUME_DOWN 0xAE #define VK_VOLUME_UP 0xAF #define VK_MEDIA_NEXT_TRACK 0xB0 #define VK_MEDIA_PREV_TRACK 0xB1 #define VK_MEDIA_STOP 0xB2 #define VK_MEDIA_PLAY_PAUSE 0xB3 * Протестировано на Windows Media Player
Вот написал, вроде работает, но заголовок окна естественно меняется и работает только со свежезапущеным винампом. Подскажите как заюзать EnumWindows для определения окана винампа? Вот мой код: Code: #include <iostream> #include <windows.h> #include "wa_ipc.h" #include "ipc_pe.h" int main(void) { std::cout << "Good..." << std::endl; system ("pause"); HWND hWinamp=FindWindowA(NULL,"Winamp 5.581"); if(hWinamp==NULL) {std::cout << "No winamp" << std::endl;} else {std::cout << "Winamp is run" << std::endl;} system ("pause"); SendMessage(hWinamp, WM_COMMAND, 40045, 0); system ("pause"); return 0; } 2 WNZRS, а какие для всего этого хидеры нужны?
Code: HWND hWinamp = FindWindowA("Winamp v1.x", NULL); для моего нужен windows.h и включенная поддержка мм клавиш в винампе (если надо им управлять)
Code: HWND winamp=NULL; BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam) { TCHAR text[512]; GetWindowText(hwnd,text,sizeof(text)); if(_tcsstr(text,_TEXT("Winamp"))!=NULL) {winamp=hwnd; return FALSE;} return TRUE; } // уже в main ... EnumWindow(&EnumWindowsProc,NULL); if(winamp==NULL)... учись читать справку уже...