2010-05-18 3 views
0

나는 Windows Media Player에 명령을 보낼 수있는 C++의 간단한 Windows 응용 프로그램을 작성 중입니다. 내 문제는 내 앱이 재생 목록의 이전 노래로 이동하게하려는 것입니다.Windows Media Player를 재생 목록의 이전 노래로 이동시키는 방법은 무엇입니까?

IWMPControls :: previous()는 작업을 수행하는 것처럼 보이지만 동작이 msdn에 기록 된 것과 다릅니다. 실제로이 기능은 현재 미디어를 처음으로 되감기 후 (현재 위치가 2-3 초 미만인 경우) 이전 노래로 전환합니다.

두 개의 다른 버튼을 구현하고 싶습니다. (제발, 왜 묻지 마세요 :) - 처음으로 되감기 위해, 하나는 이전 노래로 이동하는 것입니다. IWMPControls (또는 다른 WMP 관련 COM 인터페이스)를 통해이 작업을 수행하는 쉬운 방법이 있습니까?

p.s. 목록에있는 현재 노래의 위치 (색인)를 얻을 수 있다면 이것을 처리 할 수 ​​있습니다. 그러나 MSDN을 읽는 한 현재 재생 목록에서 현재 항목 색인을 가져 오는 쉬운 방법이 없다고 생각합니다. ...

답변

0

음, 생각났습니다. 1) 먼저 IWMPControls :: put_currentPosition (0.0)을 호출하고, 2) IWMPControls :: previous()를 호출하여 이전 노래를 강제로 적용 할 수 있습니다.

1)과 2) 사이에 약간의 시간이 지나야하기 때문에 몇 가지 문제가있을 수 있습니다. 분명한 해결책은 프로그램 내에서 PostMessage()를 사용하는 것입니다 (NOT :: PostMessage to WMP). 따라서 1 단계), PostMessage를 만들고 메시지를 처리하는 동안 2 단계를 수행하십시오.

0

외부에서 WMP 응용 프로그램을 제어하는 ​​가장 쉬운 방법은 메시지를 보내는 것입니다. . 따라서 기본 WinAPI를 고수하고 WMP 창 핸들을 얻어야합니다.

핸들을 가져온 후에 일반 Windows 메시지를 사용하여 특정 명령을 쉽게 처리 할 수 ​​있습니다.

기본적으로 SendMessage을 호출하여 이전에 HWND wmp_windows_handle을 검색합니다. 제어 메시지는 일반적으로 WM_COMMAND 메시지이며, wParam은 플레이어가 원하는 것을 지정합니다.

예를 들어 0x00004979wParam으로 지정하면 Stop 명령을 전송할 수 있습니다.

이러한 명령 코드에 대한 자세한 내용은 Google 또는 Windows Media Player SDK에 고정하면 찾고있는 것을 찾을 수 있습니다.

또한 언급 한 IWMPStuff에 익숙하지 않아서 내가 당신이고 내가 그것에 대해 구체적인 대답을 원한다면 아마 SDK라고 말할 것입니다.

+1

IWMPCore는 창없이 만들 수 있으므로 수신 할 핸들이 없습니다. 어쨌든, 만약 내가 "이전"명령을 어떻게 든 보내면, 그것은 되감기를 먼저하고 그 다음에 이전 노래로 갈 것입니다, 그래서 그것은 해결책이 아닙니다. – SadSido

+0

목록에있는 현재 노래의 색인을 결정해야한다고하셨습니다. 이는'SendMessage' 기술을 사용하여 수행 할 수도 있습니다. WMP에 대해 잘 모르지만 (예 : Winamp에서), 이는 SDK에서 간단하게 설명됩니다. –

관련 문제