2012-03-27 1 views
0

WMP SDK을 사용하여 Windows Media Player를 제어하고 있습니다. 먼저 Windows Media Player 플러그인 마법사를 사용하여 새 프로젝트를 만든 다음 명명 된 파이프를 사용하여 응용 프로그램과 통신하는 코드를 추가했습니다. 내 응용 프로그램이 음소거 할 음악을해야하는 경우, 예를 들어, 그것은 WMP 플러그인에 메시지를 보내 다음 플러그인은 음악을 음소거 :WMP SDK를 사용하여 명령을 보낼 때 Windows Media Player UI가 업데이트되지 않습니다.

CComPtr<IWMPSettings> settings; 
if (SUCCEEDED(core_->get_settings(&settings))) 
{ 
    settings->put_mute(VARIANT_TRUE); 
} 

그것은 작동하고, 내가 명령을 보낼 때, 그들은 실행 얻을 있지만, UI가 업데이트되지 않습니다. 예를 들어 음소거 명령을 보내면 음악이 음소거 상태가되고 소리가 들리지 않습니다. 음소거 버튼은 음악이 음소거 상태가 아닌 것처럼 계속 표시됩니다. 이를 증명하기 위해이 시점에서 스킨을 변경하거나 다른 노래로 건너 뛸 수 있으며 UI가 업데이트되고 음소거 상태가 올바르게 표시됩니다. 이 버튼을 클릭하면 음소거가 해제 된 다음 음소거 해제 상태 (올바른 상태가 됨)가 다시 표시됩니다.

그래서 UI를 새로 고칠 수있는 방법이 있습니까? 예를 들어 다른 해결 방법이 있습니까?

답변

0

예.put_mute이 창 대화와 함께 작동하지 않는 경우, 과 같이 Interop 및 WM_APPCOMMAND을 사용할 수 있습니다. 특히 APPCOMMAND_VOLUME_MUTE을 사용하려고합니다. 두 코드 조각을 병합

, 우리가 얻을 :

private const int APPCOMMAND_VOLUME_MUTE = 0x80000; 
private const int WM_APPCOMMAND = 0x319; 

[DllImport("user32.dll")] 
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 

CComPtr<IWMPSettings> settings; 
if (SUCCEEDED(core_->get_settings(&settings))) 
{ 
    SendMessageW(new WindowInteropHelper(this).Handle, WM_APPCOMMAND, new (IntPtr)APPCOMMAND_VOLUME_MUTE); 
} 

(경고 :. 테스트되지 않은 코드)

이 최적 것, 그리고 내가 찾을 수있는 문서의 모든 비트가 귀하의 사전 솔루션을 나타냅니다 shouldjustwork . 고려할 수도 있습니다 contacting Microsoft about this one.

+0

여기에 C# 및 C++ 코드가 병합 된 것처럼 보입니다. 또한,'new WindowInteropHelper (this) .Handle'이 WMP 창 핸들로 해석되는 방식을 이해하지 못합니다. – kolufild

관련 문제