![]() |
AW: Das Handle ist ungültig
Zitat:
Die werden immer erstellt unabhängig von einer Aktiven oder Inaktiven Session. Ich habe jetzt die Icons und das mit dem aufsuchen der Anwendungen selbst funktioniert mit der Lösung von Zacherl gut. Zitat:
Ka hast du W10? Die Icons sind im Moment nur Zentriert die höhe der Controls ist noch nicht angepasst. Das mit den doppelten Sidebar Session ist auch noch nicht behoben. (Muss nachdenken wie ich das am besten mache ohne viele Aufwand) EDIT: Zudem wenn ich diese nicht vergleichen würde müsste ich die komplette liste mit
Delphi-Quellcode:
State <> uint(TAudioSessionState.AudioSessionStateExpired)
vergleichen und das kann dauern je nachdem wie viele Prozesse am laufen sind. So vergleiche ich den Aktiven Prozess vorher mit der PID die über
Delphi-Quellcode:
SessionControl2.GetProcessID(PID);
ermittelt wurde. Somit muss ich NUR maximal 9 abfragen und nicht 100 und mehr. gruss |
AW: Das Handle ist ungültig
Zitat:
Da ist noch einiges im argen. ;) Habe ich geändert die wird nicht mehr verwendet. gruss |
AW: Das Handle ist ungültig
Zitat:
Ist schon seltsam das ganze ;) Frage mich was machen die Folder in der Liste. Zitat:
Delphi-Quellcode:
Da ist noch einiges im Argen. LOL
if PID <> GetCurrentProcessId) then
Was real ist und was nicht.. der vergleich. Und nach jedem Neustart sieht das anders aus. Den SystemSound bekomme ich nicht. Die sidebar ist doppelt und dreifach.. und AudioVolumeAdj_Eng wird als Folder angezeigt. gruss |
AW: Das Handle ist ungültig
Zitat:
Ist der Wert von FSessionCount ermittelt durch:
Delphi-Quellcode:
, denn auch acht? => Debuggen!
HR := pEnumerator.GetCount(FSessionCount);
|
AW: Das Handle ist ungültig
Bei 7 sichtbaren Controls + das der Anwendung sind es 8..
Und GetCount gibt mir 8 zurück. Beim nächsten start der Anwedung bekomme ich aber 4 sichtbare Controls + das der Anwendung sind es 5 Und GetCount gibt mir 5 zurück. Beim erneuten start der Anwendung bekomme ich über GetCount 6 geliefert. Also irgendwie macht das teil was es will. Beim letzten mal bevor ich das hier poste gibt GetCount 9 zurück. gruss |
AW: Das Handle ist ungültig
Delphi-Quellcode:
fällt dir was auf? :roll:
inc(SCount, i);
|
AW: Das Handle ist ungültig
Zitat:
Hatte es geändert auf inc(SCount) Ich hatte es aber auch aus kommentiert da es im Moment nicht mehr gebraucht wurde wegen diesen Kommentar von dir. Zitat:
gruss |
AW: Das Handle ist ungültig
Erzeugst du die visuellen Elemente aufgrund der Größe des Rückgabewertes von TAudioVolume.GetSessionCount oder aufgrund der Länge des Arrays FAudioSessionList?
Sind diese Zeilen noch aktuell oder inzwischen auch geändert/auskommentiert?
Delphi-Quellcode:
HR := pEnumerator.GetCount(FSessionCount); Succeeded(HR) then SetLength(FAudioSessionList, FSessionCount + 1); |
AW: Das Handle ist ungültig
Zitat:
Es wurden so viele Elemente erstellt wie Session <> AudioSessionStateExpired Also meine Änderung die ich aktuell verwende damit du nicht raten musst.. sorry. Habe es mal mit deinem Schnipsel versucht das gleiche Spiel. Nur als Gegenprobe zu meiner Version.
Delphi-Quellcode:
function TAudioVolume.GetSessionCount: integer;
var DeviceEnumerator: IMMDeviceEnumerator; SessionManager: IAudioSessionManager; SessionManager2: IAudioSessionManager2; AudioDevice: IMMDevice; SessionEnumerator: IAudioSessionEnumerator; SessionControl: IAudioSessionControl; SessionCount: Integer; HR: HResult; begin Result := 0; SessionCount := 0; HR := CoCreateInstance(CLASS_IMMDeviceEnumerator, nil, CLSCTX_ALL, IID_IMMDeviceEnumerator, DeviceEnumerator); if Succeeded(HR) then begin HR := DeviceEnumerator.GetDefaultAudioEndpoint(eRender, eMultimedia, AudioDevice); if Succeeded(HR) then begin HR := AudioDevice.Activate(IID_IAudioSessionManager, CLSCTX_INPROC_SERVER, nil, IUnknown(SessionManager)); if Succeeded(HR) then begin if Supports(SessionManager, IID_IAudioSessionManager2, SessionManager2) then begin HR := SessionManager2.GetSessionEnumerator(SessionEnumerator); if Succeeded(HR) then begin HR := SessionEnumerator.GetCount(SessionCount); if Succeeded(HR) then begin Setlength(FAudioSessionList, SessionCount + 1); Result := SessionCount; end; SessionControl := nil; end; SessionEnumerator := nil; end; SessionManager2 := nil; end; SessionManager := nil; end; AudioDevice := nil; end; DeviceEnumerator := nil; end;
Delphi-Quellcode:
Bei deiner Version gibt mir sessioncount 0 zurück weil ich das AudioDevice neu initialisiere.
function TAudioVolume.GetSessionPID(Index: Integer; AudioDevice: IMMDevice): DWORD;
var SessionControl2: IAudioSessionControl2; SessionControl: IAudioSessionControl; pEnumerator: IAudioSessionEnumerator; PID: DWORD; HR: HResult; begin Result := 0; if Assigned(SessionManager2) then begin HR := AudioDevice.Activate(IID_IAudioSessionManager2, CLSCTX_ALL, nil, IUnknown(SessionManager2) ); if Succeeded(HR) then begin HR := SessionManager2.GetSessionEnumerator(pEnumerator); if Succeeded(HR) then begin HR := pEnumerator.GetSession(Index, SessionControl); if Succeeded(HR) then begin HR := SessionControl.QueryInterface(IAudioSessionControl2, SessionControl2); if Succeeded(HR) then begin HR := SessionControl2.GetProcessID(PID); if Succeeded(HR) then Result := PID; end; end; end; end; end; end; Nach jeden Neustart der Anwendung addiert sich der Count über SessionEnumerator.GetCount(SessionCount); um 1! Das verstehe wer will. Die Anzahl der Session unter Windows im, Mixer bleiben aber gleich. gruss |
AW: Das Handle ist ungültig
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:00 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