2012-04-12 8 views
0

.NET Windows Media Player 라이브러리를 사용하여 Windows Media Player의 다양한 파일 속성 (예 : 사용자 등급)을 프로그래밍 방식으로 얻고 변경할 수있었습니다. Player.openPlayer(url) 호출을 통해 동일한 라이브러리를 사용하여 Windows Media Player 인스턴스를 제어 (재생, 정지, 다음 등)하고 싶습니다. 이론적으로 Player.controls 객체를 통해이 작업을 수행 할 수 있어야하지만 액세스 할 때 사용할 수있는 컨트롤이 없습니다. 모든 Player 속성/메서드/이벤트는 컨트롤 개체를 제외하고 나에게 제공됩니다. 여기에 내가 무엇을 시도했다 설명하기 위해 몇 가지 예제 코드입니다 :IronPython을 통해 Windows Media Player 인스턴스 제어 문제

import clr 
clr.AddReferenceToFile("Interop.WMPLib.dll") 
from Interop.WMPLib import WindowsMediaPlayerClass 
wmp = WindowsMediaPlayerClass() 
wmp.openPlayer(r"C:\Users\Public\Music\Sample Music\Kalimba.mp3") 

이 잘 작동,하지만 내가 할 때 다음

print wmp.controls.isAvailable("play").ToString() 
print wmp.controls.isAvailable("pause").ToString() 
print wmp.controls.isAvailable("stop").ToString() 
... 

나는 각 컨트롤에 대해 false를 얻는다. 내 (단순한) 응용 프로그램에서 이러한 컨트롤을 사용할 수없는 이유는 무엇입니까? 아마 내가 잘못된 방향으로 가고 있을까요? WMP 12를 사용하고 있으므로 호환이 가능해야합니다. 나는 정말로 다른 API를 사용하지 않기를 원하지만, 지금은 아무 것도 시도하지 않을 것이다. http://msdn.microsoft.com/en-us/library/dd564034%28v=vs.85%29.aspx

편집 : 여기

참조 설명서입니다 빠른 수정이 지금 들고,하지만, 난 여전히 아직 실제적인 해결책을 발견하지 않았습니다.

+0

질문이 명확하지 않습니까? – covertCoder

+0

아니요, 그렇다고해도 지식의 교차로가 필요합니다. IronPython을 사용하여 WMP를 제어 한 사람이 처음 일 것입니다. :)'isAvailable'을 무시하고'play()'를 호출하면 어떻게 될까요? –

+0

다른 모든 제어 기능과 마찬가지로 아무 일도 일어나지 않습니다. 다른 함수는 오류를 반환하지 않지만 의도 한 기능을 수행하지 않습니다. 현재 퀵 픽스는 새로운 재생 목록/미디어 파일을 열 때마다 Player.openPlayer를 호출하는 것이지만 WMP 인스턴스가 깜박 거리거나 최악의 상황이 내가하는 일에서 무엇이든지간에 집중할 수 있습니다. – covertCoder

답변

0

print wmp.controls.get_isAvailable("play"); 
print wmp.controls.get_isAvailable("stop"); 
etc. 

을 시도하지만, WMP 제어를 밝혔다에 당신이 파일을로드 할 때까지 그 컨트롤을 사용할 수 없습니다 것을 명심하십시오.

먼저 재생하려는 파일의 경로에 wmp.URL을 설정 한 다음로드가 완료되면 wmp.controls.play();을 호출하십시오. OpenStateChange 이벤트를 수신하여로드되어 있는지 확인할 수 있습니다.

+0

문제는 wmp 인스턴스를로드하는 방법에 관계없이 wmp.controls.play()가 작동하지 않는다는 것입니다. 나는 wmp.URL, wmp.launchURL, wmp.openPlayer 등을 시도했지만 wmp.controls. ()은 여전히 ​​아무것도 수행하지 않습니다. 또한 올바른 함수가 wmp.controls.isAvailable ("control")이기 때문에 wmp.controls.get_isAvailable ("control")은 오류를 반환하지만 어쨌든 다시 작동하지 못합니다. 나는 이러한 컨트롤을 호출하기 전에로드되어 있는지 확인하지만 OpenStateChange도 결코 실행되지 않습니다. – covertCoder

+0

'Error','MediaError' 또는'StatusChange' 이벤트를 수신 해 보았습니까? 어떤 사건이 발생합니까? 그들은 오류를 추적하는 데 도움이 될 수 있습니다. 또한 플레이어 자체가 'WindowsMediaPlayer' 클래스가 아니며 ('class '접미사가 없음)? – marmulin

+0

제 생각에 WindowsMediaPlayer는 추상 클래스이고 WindowsMediaPlayerClass (Player라는 문서에서 알려짐)는 실제 API입니다. 이 API는 스크립팅 용이며 다른 WMP API와 반드시 동일한 것은 아닙니다. 앞서 언급 한 이벤트를 듣기 위해 노력했지만 플레이어를 수동으로 사용하거나 프로그램 방식으로 사용하면 실행되지 않습니다. 문서화는 할 수있는 것과 수행 할 수없는 것에 대해 약간 혼란 스럽다. – covertCoder