![]() |
Audio Session Test
Projekt entfernt..
|
AW: Audio Session Test
Da keine Rückantworten kommen gehe ich mal davon aus das es in Ordnung ist.
Danke! für das Ausprobieren. gruss |
AW: Audio Session Test
Ich weiß noch nicht was für eine Art Rückmeldung Du erwartest.
Hier wäre zumindest eine: starte ich das Programm ohne Audio abzuspielen ist es komplett leer. spiele ich dann Audio ab bleibt es leer. kann ja auch sein das das programm immer nur beim starten schaut ob was aktiv ist, weil da seh ich dann auch was :) töte ich audio während deine app läuft verändert sich in der anzeige nichts. manchmal zeigt der "expired" an zu den verschiedensten prozessen die bei mir niemals audio wiedergeben, webbrowser zum beispiel. Die PID Anzeige funktioniert jedenfalls, habe die mal verglichen. |
AW: Audio Session Test
Zitat:
Den Status der Audio Session. Zitat:
Also ohne "als Admin ausführen" wird das wohl nix. Zitat:
Zitat:
Ist der Leer nun dann ist es meine Anwendung auch.. Aber das möchte ich bezweifeln. (Systemsound ist immer aktiv) Zitat:
Die Anwendung ist weiterhin aktiv und kann Audio Wiedergeben warum sollte sich dann der Status ändern? Ich bin immer noch in der Lage als bsp. die Lautstärke des Prozesses zu verändern unabhängig davon ob eine Wiedergabe statt findet solange wie der Prozess aktiv ist. Manchmal verstehe ich deine Beiträge nicht! Du schreibst etwas ohne das geringste Hintergrund wissen. Informiere dich doch erst einmal was eine Audio Session repräsentiert. Aber für Anfänger!
Zitat:
Wenn der Prozess expired anzeigt dann wurde er vorher auch gestartet und teilt dem System mit "Hallo ich kann Audio wiedergeben". Bei "expired" wurde er beendet und befindet sich nicht mehr im Ausführbaren zustand und eine Kontrolle über die Eigenschaften von Audio des geschlossenen Prozess ist nicht mehr nötig. Wird dort der Browser als Session angezeigt dann hat es seine Richtigkeit und ja o graus er ist in der Lage Audio wiederzugeben und hat es mindestens einmal getan. ![]() Hmm... irgendwie seltsam der Webbrowser wird ja angezeigt. Eine Audio Session sagt nichts darüber aus ob Audio wiedergegeben wird sondern signalisiert das der angezeigte Prozess grundsätzlich zur Audiowiedergabe fähig und das mindestens 1 mal also beim Start (oder zwischendurch) des Prozesses getan hat. Ob das nun der Webbrowser oder irgendein anderer Prozess ist spielt dabei keine rolle. Zitat:
Wie dem auch sei denke funktioniert einwandfrei. Danke. Source gibt es leider keinen. gruss |
AW: Audio Session Test
Quelltext hochgeladen.
gruss |
AW: Audio Session Test
Zwei Korrekturen..
1. Verhindern das gleiche Anwendungen doppelt oder dreifach angezeigt werden.
Delphi-Quellcode:
2. Den Thread absichern (Thread safe) (TTHread.Queue)
procedure TSessionThread.Execute;
var Success: HResult; Msg: TMsg; HR: HResult; i: integer; IntI: integer; M, N: integer; bDuplicate: boolean; ASessionInfo: TSessionInfo; begin Success := CoInitializeEx(nil, COINIT_MULTITHREADED); FWnd := AllocateHWnd(WndProc); SessionNotification := TAudioSessionNotification.Create; SessionNotification.SetMsgHandle(FWnd); SetupDefaultAudioEndpoint; HR := SessionEnumerator.GetCount(i); if HR = S_OK then N := i else N := 0; M := 0; for i := 0 to (N - 1) do begin ASessionInfo := GetSessionInfoByIndex(i); if ASessionInfo.FileName <> '' then // is a invalid session info ? begin // Check to prevent duplicate registeration of audio session bDuplicate := false; for IntI := 0 to (M - 1) do if SessionInfo[IntI].PID = ASessionInfo.PID then begin // for the case of reuse of same PID (but different programs) if SessionInfo[IntI].State <> AudioSessionStateExpired then begin bDuplicate := true; break; end; end; if not bDuplicate then begin inc(M); SetLength(SessionInfo, M); SessionInfo[M-1] := ASessionInfo; end; end; end; FSessionCount := M; FWmiAsyncEvent := TWmiAsyncEvent.Create; FWmiAsyncEvent.OnProcessTerminated := ProcessTerminated; FWmiAsyncEvent.Start; try while not Terminated do begin if MsgWaitForMultipleObjects(0, nil^, False, 1000, QS_ALLINPUT) = WAIT_OBJECT_0 then begin while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; end; if bEnd then break; end; finally DeallocateHWnd(FWnd); end; FWmiAsyncEvent.Free; if SessionManager2 <> nil then SessionManager2.UnregisterSessionNotification(SessionNotification); CoUninit(Success); end;
Delphi-Quellcode:
gruss
procedure TSessionThread.WndProc(var Msg: TMessage);
var i: integer; bDuplicate: boolean; begin if Msg.Msg = WM_SessionCreate then begin ASessionInfo := GetSessionInfo(IAudioSessionControl(Msg.WParam)); if ASessionInfo.FileName <> '' then // Is a valid audio session ? begin // Check to prevent duplicate registeration of audio session bDuplicate := false; for i := 0 to (FSessionCount - 1) do if SessionInfo[i].PID = ASessionInfo.PID then begin // for the case of reuse of same PID (but different programs) if SessionInfo[i].State <> AudioSessionStateExpired then begin bDuplicate := true; break; end; end; if not bDuplicate then begin inc(FSessionCount); SetLength(SessionInfo, FSessionCount); SessionInfo[FSessionCount-1] := ASessionInfo; if Assigned(FOnAudioSessionCreate) then TTHread.Queue(nil, // executes a procedure call within the main thread. procedure // Unlike Synchronize, execution of the current thread begin // is allowed to continue. FOnAudioSessionCreate(ASessionInfo, FSessionCount); end); end; end; end else Msg.Result := DefWindowProc(FWnd, Msg.Msg, Msg.WParam, Msg.LParam); end; procedure TSessionThread.ProcessTerminated(ProcessID: Cardinal); var i: integer; begin for i := 0 to (FSessionCount - 1) do begin if SessionInfo[i].PID = ProcessID then begin SessionInfo[i].State := AudioSessionStateExpired; ASessionInfo := SessionInfo[i]; if Assigned(FOnAudioSessionExpire) then TTHread.Queue(nil, // executes a procedure call within the main thread. procedure // Unlike Synchronize, execution of the current thread begin // is allowed to continue. FOnAudioSessionExpire(ASessionInfo, i); end); break; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz