2011-08-17 8 views
5

TMediaPlayer를 사용하여 WAV 파일을 재생하는 프로그램이 Delphi XE로 작성되었습니다. 이 프로그램은 Windows 7 컴퓨터의 시스템 트레이에서 실행됩니다. 프로그램이 이벤트가 발생하여 wav 파일을 재생할 때까지 기다립니다. 컴퓨터 자체에 로그인하면 wav가 정상적으로 작동합니다. 그러나 컴퓨터 터미널을 잠그거나 원격 데스크톱을 통해 로그인하면 wav 파일이 컴퓨터 스피커를 통해 재생되지 않습니다. 이벤트 처리기의 다른 모든 코드가 올바르게 작동하기 때문에 이벤트가 트리거되고 있음을 알 수 있습니다. wav 파일을들을 수 없다는 것입니다. 볼륨 문제가 아니라는 것을 알기 위해 볼륨을 최대 레벨로 하드 코딩했습니다. 아무도 현재 컴퓨터에 로그인하지 않은 경우 Windows 7에 스피커를 통해 소리가 들어오지 못하도록하는 무언가가 있습니까? 그 한계가 존재한다면, 주변에 방법이 있습니까?로그인하지 않은 상태에서 스피커를 통해 사운드 출력

+1

표준 PlaySound Windows API를 사용하는 경우에도 동일한 문제가 발생합니까? – Brad

+0

예, PlaySound를 사용하여 동일한 문제가 발생합니다. Speech API를 사용해 보았는데 같은 문제가 있습니다. 마치 컴퓨터에 직접 로그인하지 않으면 사운드 카드에서 아무 것도 출력하지 않는 것과 같습니다. –

+0

콘솔이 잠겨 있어도 실행중인 프로그램이 PlaySound API 함수로 사운드를 재생할 수 있다는 것을 알고 있습니다. Delphi에 익숙하지 않지만 Win32 API를 직접 호출 했습니까? 도움이되면 컴퓨터를 잠그면 화면에 표시된 내용이 실제로는 다른 세션입니다. 원격 데스크톱과 동일합니다 ... 다른 세션입니다. – Brad

답변

3

Brad의 제안에 따라 TMediaPlayer 대신 PlaySound()을 사용하십시오. 기계가 '잠겨'있을 때 잘 작동합니다. 하지만 원격 데스크톱 연결을 통해 작동하는지는 확실하지 않습니다.

이를 확인하기 위해, 나는, 새로운 응용 프로그램을 만든 폼에 TTimer을 넣어, 20000에 Interval 속성을 설정하고 OnTimer 이벤트에서이 코드를 넣어 :

나는 그것을 실행 한 다음
procedure TForm13.Timer1Timer(Sender: TObject); 
begin 
    PlaySound('c:\windows\media\tada.wav', 0, SND_ASYNC or SND_FILENAME); 
end; 

, 잠겨 콘솔 (윈도우L)와 함께 20 초 기다렸습니다. 사운드가 성공적으로 재생되었습니다.

+2

원격 데스크톱 연결을 통해 작업 할 때 원격 시스템 대신 로컬에서 사운드를 재생하도록 연결을 설정해야합니다. 나는 동료들에게 그들이 집에서 일할 때 그들의 소리를 재배 선하도록 상기시켜야했기 때문에 알고있다. –

+2

@Marjan, 덧글에 +1, 그리고 철사 절단기에 의지하지 않기. 나는 그것이 유혹에 빠졌음을 확신한다. –

+0

@Chris :-) 그래, 그게 ... –

관련 문제