2011-08-17 11 views
5

Mam program napisany w Delphi XE, który odtwarza plik WAV przy użyciu TMediaPlayer. Program działa w zasobniku systemowym na komputerze z systemem Windows 7. Program czeka, aż zdarzenie uruchomi odtwarzanie pliku wav. Jeśli jestem zalogowany na samym komputerze, WAV gra dobrze. Ale jeśli zablokuję terminal komputera (lub zaloguję się za pomocą Pulpitu zdalnego), plik wav nie będzie odtwarzany przez głośnik komputera. Wiem, że zdarzenie jest uruchamiane, ponieważ cały inny kod w module obsługi zdarzeń działa dobrze; po prostu nie słychać pliku WAV. Poziom woluminu został zakodowany na maksymalnym poziomie, więc wiem, że nie jest to problem z woluminem. Czy system Windows 7 ma coś, co uniemożliwia dźwięk dochodzący z głośnika, jeśli nikt nie jest aktualnie zalogowany na komputerze? Jeśli to ograniczenie istnieje, czy istnieje sposób obejścia tego?Dźwięk wyjściowy przez głośnik, gdy nie jest zalogowany

+1

Czy masz ten sam problem, jeśli używasz standardowego interfejsu API Windows PlaySound? – Brad

+0

Tak, ten sam problem występuje przy użyciu PlaySound. Próbowałem również używać Speech API i mam ten sam problem. To tak, jakby karta dźwiękowa nie wyprowadzała niczego, chyba że jesteś zalogowany na komputerze bezpośrednio. –

+0

Wiem na pewno, że uruchomiony program może odtwarzać dźwięk za pomocą funkcji API PlaySound, nawet gdy konsola jest zablokowana. Nie znam Delphi, ale czy jesteś pewien, że wywołałeś bezpośrednio API Win32? Jeśli pomaga, po zablokowaniu komputera, to, co widać na ekranie, jest w rzeczywistości inną sesją. To samo z Remote Desktop ... jest to inna sesja. – Brad

Odpowiedz

3

Jak sugeruje Brad, użyj PlaySound() zamiast TMediaPlayer. Działa dobrze, gdy urządzenie jest "zablokowane". Nie jestem pewien, czy działa on nad połączeniem z komputerem stacjonarnym.

Aby to potwierdzić, stworzyłem nową aplikację, umieścić TTimer na formularzu, należy ustawić właściwość Interval do 20000 i umieścić ten kod w przypadku OnTimer:

procedure TForm13.Timer1Timer(Sender: TObject); 
begin 
    PlaySound('c:\windows\media\tada.wav', 0, SND_ASYNC or SND_FILENAME); 
end; 

Potem prowadził ją, blokada konsola (z WindowsL) i odczekał 20 sekund. Dźwięk odtwarzany pomyślnie.

+2

Po podłączeniu pulpitu zdalnego należy ustawić połączenie, aby odtwarzać dźwięk lokalnie, a nie na komputerze zdalnym. Wiem, ponieważ musiałem przypominać kolegom, żeby zmienili ścieżkę dźwiękową, gdy pracowali z domu ... –

+2

@Marjan, +1 w komentarzu, a nie przy użyciu nożyc do drutu. Jestem pewien, że to było kuszące. –

+0

@Chris: :-) Tak, to było ... –

Powiązane problemy