[C++] команды плееру

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Qb1024, 6 Aug 2010.

  1. Qb1024

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    Есть ли готовые хидеры для управления плеером (играть, пауза, далее) типа мультимедийных клавиш?
    Хочу сделать дистанционное управление плеером на CGI.
     
  2. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Ты думаешь что существует ТОЛЬКО один плеер или как ??
    Хотя бы название плеера написал.
     
  3. Qb1024

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    Я предполагал, что мультимидийные клавиши через драйвер посылают какие то стандартизированные команды, т.к. на клаве не пушут каким конкретно плеером могут управлять клавиши.
    Я заблуждаюсь?
     
  4. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Qb1024 я думаю да.
    У winamp -а например есть своя документация и спецовые заголовочные файлики в которых описано какие сообщения окну нужно посылать для управления проигрывателем. Там все просто...
    Ну а по поводу других плееров хз, но уверен что есть что-то подобное у них
     
    _________________________
  5. keen6

    keen6 New Member

    Joined:
    7 Apr 2010
    Messages:
    46
    Likes Received:
    4
    Reputations:
    0
    у AIMPa тоже есть SDK, только не такое крутое , как у WinAmpa. У меня знакомый как раз пишет плагинчег под него.

    Скорее всего, это только для WMP
     
  6. Qb1024

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    В том то и дело, что подобные клавиши управляют ВСЕМИ мультимедийными приложениями, которые находятся в фокусе (а некоторыми независимо от фокуса). И это при том, что я вообще убрал WMP из системы.


    Подскажите где найти упомянутые хидеры для винампа с документацией на русском языке?
     
  7. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    2 Qb1024
    ты программированием занялся а не бальными танцами
    документации на русском языке просто не существует. то что есть в интернете это любительские переводы. так же в нете можно найти схожие статьи по теме, собрать все в кучу и разобраться
    ты пробовал искать?

    http://dev.winamp.com/wiki/SDK_Contents
    http://delphiblog.ru/2007/winamp-programming

    тебе должно быть стыдно! я потратил меньше минуты
     
    _________________________
  8. Qb1024

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    Gar|k, dev.winamp.com я находил, но сайт не открылся.

    А на другом сайте описано применение на делфи, а я не на столько хорошо знаю C++, чтобы легко переписать код под C++.
    Именно поэтому я и попросил помощи.
     
    #8 Qb1024, 6 Aug 2010
    Last edited: 7 Aug 2010
  9. Qb1024

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    Хорошо, тогда задам немного другой вопрос:
    как в консольном приложении на C++ найти окно по заголовку и отправить ему сообщение?
    В инете на данный вопрос полно кода только на делфи.

    Единственое, что нашёл это:
    Code:
    HWND hwndWinamp = FindWindow("Winamp v1.x",NULL);
     
  10. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    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 person likes this.
  11. Qb1024

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    Спасибо, попробую и отпишусь.
     
  12. Qb1024

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    Возникло несколько ошибок:
    1) #include <window.h> не катит, пошло только #include <windows.h>
    2) При компиляции ругается на
    Code:
    FindWindow(NULL,"Winamp 5.581");
     
  13. keen6

    keen6 New Member

    Joined:
    7 Apr 2010
    Messages:
    46
    Likes Received:
    4
    Reputations:
    0
    Надо FindWindowA(NULL,"Winamp 5.581");
     
  14. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    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
     
    _________________________
    #14 Gar|k, 7 Aug 2010
    Last edited: 7 Aug 2010
  15. keen6

    keen6 New Member

    Joined:
    7 Apr 2010
    Messages:
    46
    Likes Received:
    4
    Reputations:
    0
    Да, лучше юникод.
     
  16. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    Команды любому плееру с помощью мм клавиш легко делать (если плеер понимает эти клавиши)

    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
     
  17. Qb1024

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    Вот написал, вроде работает, но заголовок окна естественно меняется и работает только со свежезапущеным винампом. Подскажите как заюзать 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, а какие для всего этого хидеры нужны?
     
    #17 Qb1024, 7 Aug 2010
    Last edited: 7 Aug 2010
  18. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    Code:
    HWND hWinamp = FindWindowA("Winamp v1.x", NULL);
    для моего нужен windows.h
    и включенная поддержка мм клавиш в винампе (если надо им управлять)
     
  19. Catbert

    Catbert Banned

    Joined:
    29 Jun 2010
    Messages:
    80
    Likes Received:
    27
    Reputations:
    10
    Ищи окно по имени процесса
     
  20. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    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)...
    
    учись читать справку уже...
     
    _________________________