AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Das Handle ist ungültig

Ein Thema von EWeiss · begonnen am 2. Mai 2018 · letzter Beitrag vom 6. Mai 2018
Antwort Antwort
Seite 6 von 10   « Erste     456 78     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#51

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 10:22
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.
Task Manager parallel öffnen und schauen, ob das Programm richtig beendet wird.
Beim Debuggen?
Ist nicht nötig die IDE beendet sich dann ist das Programm garantiert auch beendet.

gruss
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#52

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 10:29
Das Problem lässt sich mit Konsolenprogramm nicht nachvollziehen. Viel Spaß bei der Fehlersuche.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#53

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 10:32
Das Problem lässt sich mit Konsolenprogramm nicht nachvollziehen. Viel Spaß bei der Fehlersuche.
Danke Hab ja sonst nix zu tun

gruss
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#54

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 12:14
Hmm..

(Gerade erst hiermit beschäftigt )

Mal den Source vom Konsolenprogramm getestet und mir den Log in einem Memo ausgeben lassen.
Erweitert um die weiteren Infos aus IAudioSessionControl2/IAudioSessionControl.
Dann mal nen Timer angesetzt.

Ergebnis
(Getestet auf Win7 64bit mit D6)
- Windows scheint die AudioSessions zu cachen
- Nach 180 Sekunden (3 Minuten) werden die aus dem Cache entfernt.
- Eine aktive/existierende Session hat den State 1 (IAudioSessionControl.GetState())
- Wird die Applikation beendet, erhält diese umgehend den State 0, verbleibt aber in der Liste.
- Die PID der AudioSession gehört also zu keinem laufenden Process...

Resultat:
Es genügt nicht durch den Enum durchzulaufen und sich die PID über IAudioSessionControl2 zu holen, sondern es muss der State geprüft werden, da nur noch die PIDs gültig sind, welche einen State 1 haben.

Der Mixer wird nur die Apps anzeigen, welche State 1 haben (und zusätzlich den System).

Keine App läuft:
Zitat:
SessionCount: 1
---------------------------------------------------
SessionIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}
InstanceIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}|1%b#
ProcessId: 0
DisplayName: @%SystemRoot%\System32\AudioSrv.Dll,-202
IconPath: @%SystemRoot%\System32\AudioSrv.Dll,-203
IsSystemSoundsSession: 0
State: 0
---------------------------------------------------
VidPlayer gestartet:
Zitat:
SessionCount: 2
---------------------------------------------------
SessionIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|\Device\HarddiskVolume2\Tools\playwi n.exe%b{00000000-0000-0000-0000-000000000000}
InstanceIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|\Device\HarddiskVolume2\Tools\playwi n.exe%b{00000000-0000-0000-0000-000000000000}|1%b4048
ProcessId: 4048
DisplayName:
IconPath:
IsSystemSoundsSession: 1
State: 1
---------------------------------------------------
SessionIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}
InstanceIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}|1%b#
ProcessId: 0
DisplayName: @%SystemRoot%\System32\AudioSrv.Dll,-202
IconPath: @%SystemRoot%\System32\AudioSrv.Dll,-203
IsSystemSoundsSession: 0
State: 0
---------------------------------------------------

VidPlayer beendet:
Zitat:
SessionCount: 2
---------------------------------------------------
SessionIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|\Device\HarddiskVolume2\Tools\playwi n.exe%b{00000000-0000-0000-0000-000000000000}
InstanceIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|\Device\HarddiskVolume2\Tools\playwi n.exe%b{00000000-0000-0000-0000-000000000000}|1%b4048
ProcessId: 4048
DisplayName:
IconPath:
IsSystemSoundsSession: 1
State: 0
---------------------------------------------------
SessionIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}
InstanceIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}|1%b#
ProcessId: 0
DisplayName: @%SystemRoot%\System32\AudioSrv.Dll,-202
IconPath: @%SystemRoot%\System32\AudioSrv.Dll,-203
IsSystemSoundsSession: 0
State: 0
---------------------------------------------------
Nach 3 Minuten:
Zitat:
SessionCount: 1
---------------------------------------------------
SessionIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}
InstanceIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}|1%b#
ProcessId: 0
DisplayName: @%SystemRoot%\System32\AudioSrv.Dll,-202
IconPath: @%SystemRoot%\System32\AudioSrv.Dll,-203
IsSystemSoundsSession: 0
State: 0
---------------------------------------------------
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#55

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 12:23
Zitat:
Resultat:
Es genügt nicht durch den Enum durchzulaufen und sich die PID über IAudioSessionControl2 zu holen, sondern es muss der State geprüft werden, da nur noch die PIDs gültig sind, welche einen State 1 haben.
Holger das tue ich doch.. bitte siehe folgenden Schnipsel hoffe er reicht.

Delphi-Quellcode:
              HR := SessionControl2.GetProcessID(PID);
              if Succeeded(HR) then
              begin
                HR := SessionControl2.GetState(State);
                if Succeeded(HR) then
                begin
                  if State <> uint(TAudioSessionState.AudioSessionStateExpired) then
                    Result := PID;
                end;
              end;
Mein Problem ist das mit jedem erneuten start der Counter von
SessionEnumerator.GetCount(SessionCount);
um 1 erhöht wird.
Damit addiere ich Aktive und inaktive Session.

Das bekomme ich erst gar nicht es fehlt mir warum auch immer.
Zitat:
SessionCount: 1
---------------------------------------------------
SessionIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}
InstanceIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}|1%b#
ProcessId: 0
DisplayName: @%SystemRoot%\System32\AudioSrv.Dll,-202
IconPath: @%SystemRoot%\System32\AudioSrv.Dll,-203
IsSystemSoundsSession: 0
State: 0
gruss

Geändert von EWeiss ( 4. Mai 2018 um 12:28 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#56

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 12:37
Hmm..

Zitat:
Mein Problem ist das mit jedem erneuten start der Counter von
SessionEnumerator.GetCount(SessionCount);
um 1 erhöht wird.
Damit addiere ich Aktive und inaktive Session.
Zitat:
Ergebnis
(Getestet auf Win7 64bit mit D6)
- Windows scheint die AudioSessions zu cachen
- Nach 180 Sekunden (3 Minuten) werden die aus dem Cache entfernt.
- Eine aktive/existierende Session hat den State 1 (IAudioSessionControl.GetState())
- Wird die Applikation beendet, erhält diese umgehend den State 0, verbleibt aber in der Liste.
- Die PID der AudioSession gehört also zu keinem laufenden Process...
Windows cacht!!!!!!
Also, wenn Du deine App mit Audioausgabe innerhalb der 3 Minuten 'neu' startest, wird eine 'neue' Session (wg. neuer PID) angelegt, aber die alte ist auch noch da! Ich vermute, dass Windows cacht, da es Programme gibt, die die Audioausgabe nur 'unterbrechen' und dann mit gleicher PID wieder starten.

SessionCount beinhaltet immer alle Session, ob nun aktiv (State=1) oder deaktiv (State=0)!

Warte zwischen deinen Neustarts einfach mal 3+ Minuten.

Um (wie der Mixer) immer die aktuelle Liste anzuzeigen, musst Du diese immer wieder überprüfen und bereinigen/erweitern. Es genügt nicht, diese beim Programstart einzulesen.
Für das Testtool habe ich die Liste alle 500ms abgefragt..

<quote>
Das bekomme ich erst gar nicht es fehlt mir warum auch immer.
<quote>
SessionCount: 1
---------------------------------------------------
SessionIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}
InstanceIdentifier: {0.0.0.00000000}.{8aa1d6e2-aca1-4ae5-a835-6c0dbea6b990}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}|1%b#
ProcessId: 0
DisplayName: @%SystemRoot%\System32\AudioSrv.Dll,-202
IconPath: @%SystemRoot%\System32\AudioSrv.Dll,-203
IsSystemSoundsSession: 0
State: 0
</quote></quote>

Da Du State 0 aussortiertst, sollte dass auch so sein!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#57

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 12:49
Zitat:
Da Du State 0 aussortiertst, sollte dass auch so sein!
Ich sortiere ihn nicht aus was ich aussortiere ist State 2 = AudioSessionStateExpired
Alles andere wird zugelassen.

Zitat:
Um (wie der Mixer) immer die aktuelle Liste anzuzeigen, musst Du diese immer wieder überprüfen und bereinigen/erweitern. Es genügt nicht, diese beim Programstart einzulesen.
Für das Testtool habe ich die Liste alle 500ms abgefragt..
Und dann alle 500ms Sekunden meine Controls neu erstellen.. boahh das wird wohl ein Unding.
Ich habe dafür Events erstellt die das eigentlich für mich regeln sollen.
Und da gibt es auch ein Problem es feuert nur ab wenn ich meine Sound Anwendung beende.
Ich kann dann darauf reagieren und das jeweilige Control entladen aber wenn die Anwendung neu gestartet wird feuert das Event nicht ab.

gruss

Geändert von EWeiss ( 4. Mai 2018 um 12:56 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#58

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 13:10
Hmm.

Zitat:
Da Du State 0 aussortiertst, sollte dass auch so sein!
Ich sortiere ihn nicht aus was ich aussortiere ist State 2 = AudioSessionStateExpired
Alles andere wird zugelassen.

Also, laut meinen Test gibt es nur State 0 und 1, wobei 1 derjenige ist, wenn die App läuft.


Zitat:
Um (wie der Mixer) immer die aktuelle Liste anzuzeigen, musst Du diese immer wieder überprüfen und bereinigen/erweitern. Es genügt nicht, diese beim Programstart einzulesen.
Für das Testtool habe ich die Liste alle 500ms abgefragt..
Und dann alle 500ms Sekunden meine Controls neu erstellen.. boahh das wird wohl ein Unding.
Ich habe dafür Events erstellt die das eigentlich für mich regeln sollen.
Und da gibt es auch ein Problem es feuert nur ab wenn ich meine Sound Anwendung beende.
Ich kann dann darauf reagieren und das jeweilige Control entladen aber wenn die Anwendung neu gestartet wird feuert das Event nicht ab.
Du brauchst nicht immer 'alle' neu zu machen, sondern nur die, welche nicht mehr vorhanden sind entfernen und jene, welche neu gestartet wurden hinzufügen..

Somit sollte deine App eigentlich beim Programmstart einmal alle Sessions durchgehen und die PIDs mit State 1 merken (und wenn ich es richtig verstanden habe ein Control jeweils erzeugen).

Dann sollte entweder im Intervall geprüft werden, ob deine Liste noch gültig ist und die PIDS /Controls entfernen/hinzufügen, welche sich geändert haben.

Wenn es seitens MS ein Event gibt, wenn eine andere App gestartet/beendet wurde, könnte diese auch als Trigger verwendet werden.
Jedoch wird es auch Apps geben, die ohne sich selbst zu beenden die AudiSession schließen.

Von welchen Events lässt Du dich denn benachrichtigen?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#59

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 13:20
Und dann alle 500ms Sekunden meine Controls neu erstellen.. boahh das wird wohl ein Unding.
Naja, du müsstest ja nur immer wieder gucken, ob sich was getan hat (wenn die Event-Variante nicht klappt) und nur in dem Fall, das was neu dazugekommen ist / oder weggefallen ist, deine Controls anpassen.

Zitat:
Ich sortiere ihn nicht aus was ich aussortiere ist State 2 = AudioSessionStateExpired
Gibt es denn den State 2 in der freien Wildbahn (im Gegensatz zur Theorie)? Vieleicht setzt Windows den State jenachdem direkt auf 0?


Edit: Sorry für dem ähnlichen Post zu HolgerX, die rote Kiste kam nit.
Ralph
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#60

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 13:23
Zitat:
Dann sollte entweder im Intervall geprüft werden, ob deine Liste noch gültig ist und die PIDS /Controls entfernen/hinzufügen, welche sich geändert haben.
Nun ja das beenden macht ja mein Event von sich aus wird das gefeuert schalte ich das Control auf Hide (muss das später noch ändern).

Zitat:
Von welchen Events lässt Du dich denn benachrichtigen?
IAudioSessionEvents..

Delphi-Quellcode:
function TAudioSessionEvents.OnStateChanged(NewState: uint): HResult; stdcall;
begin
  PostMessage(MsgHandle, WM_SessionStateEvent, NewState, 0);

  Result := S_OK;
end;
Delphi-Quellcode:
    WM_SessionStateEvent:
      begin
        if Assigned(FOnSessionStateEvent) then
          FOnSessionStateEvent(Msg.WPARAM);
      end;
Zitat:
Jedoch wird es auch Apps geben, die ohne sich selbst zu beenden die AudiSession schließen.
Genau und dafür steht State 2 zur Verfügung.
Zitat:
AudioSessionStateExpired
The audio session has expired. (It contains no streams.)
gruss

Geändert von EWeiss ( 4. Mai 2018 um 14:31 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 10   « Erste     456 78     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz