AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Das Handle ist ungültig

Ein Thema von EWeiss · begonnen am 2. Mai 2018 · letzter Beitrag vom 6. Mai 2018
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 08:48
inc(SCount, i); fällt dir was auf?
Das hatte ich gestern schon geändert ist mir auch Aufgefallen. Aber danke für den Hinweis.
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:
Warum eigentlich der Vergleich von PID mit der ProcID, die du über die gefüllte ProcList holst? Wozu dient das?
Ohne den vergleich macht das teil was es will.

gruss
  Mit Zitat antworten Zitat
TiGü

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

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 08:53
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);
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 09:04
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);
aufgrund von des Arrays FAudioSessionList TAudioVolume.GetSessionCount deshalb das SCount
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:
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;
Bei deiner Version gibt mir sessioncount 0 zurück weil ich das AudioDevice neu initialisiere.

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

Geändert von EWeiss ( 4. Mai 2018 um 09:20 Uhr)
  Mit Zitat antworten Zitat
TiGü

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

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 09:19
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 09: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.079 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 09: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
 
#7

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 09: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
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:51 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