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
TiGü

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

AW: Das Handle ist ungültig

  Alt 3. Mai 2018, 13:56
Delphi-Quellcode:
for j := 0 to ProcList.Count - 1 do
                    begin
                      ProcId := GetProcessIdFromModuleName(pWideChar(ProcList[j]));
                      if (PID = ProcId) and (PID <> GetCurrentProcessId) then
                      begin
                        if State <> uint(TAudioSessionState.AudioSessionStateExpired) then
                        begin
                          FAudioSessionList[i].ActiveSession := IntToStr(i);
                          FAudioSessionList[i].PID := PID;
                          inc(SCount, i);
                        end;
                      end;
                    end;
Warum eigentlich der Vergleich von PID mit der ProcID, die du über die gefüllte ProcList holst? Wozu dient das?
Die PID, die du mit SessionControl2.GetProcessID(PID); ermittelst, gibt dir doch eine gültige Process ID einer Audiosession?

Der ieexplore lässt sich ohne große Verrenkungen per OpenProcess ermitteln:
Code:
SessionIndex:             2
SessionIdentifier:        {0.0.0.00000000}.{18e53891-8712-4c0d-9aab-e23e4b813b96}|#%b{63C9CE85-D9FF-4AE9-A105-C25B9A69E0C8}
SessionInstanceIdentifier: {0.0.0.00000000}.{18e53891-8712-4c0d-9aab-e23e4b813b96}|#%b{63C9CE85-D9FF-4AE9-A105-C25B9A69E0C8}|12%b#
DisplayName:
IconPath:
Process ID:               5444
ProcessName:              C:\Program Files (x86)\Internet Explorer\iexplore.exe
ProcessName wird über OpenProcess() und GetModuleFileNameEx() geholt.

Geändert von TiGü ( 3. Mai 2018 um 14:02 Uhr)
  Mit Zitat antworten Zitat
TiGü

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

AW: Das Handle ist ungültig

  Alt 3. Mai 2018, 14:01
Du solltest deiner TAudioVolume.GetPathFromPID Methode in der ersten Zeile übrigens ein Result := ''; gönnen. Sicher ist sicher!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Das Handle ist ungültig

  Alt 3. Mai 2018, 14:09
Du solltest deiner TAudioVolume.GetPathFromPID Methode in der ersten Zeile übrigens ein Result := ''; gönnen. Sicher ist sicher!
Wie gesagt ich schicke dir das Projekt gerne zu dann kannst sehen was abgeht. (PN mit Mail sollte reichen)
Da ist noch einiges im argen.

Habe ich geändert die wird nicht mehr verwendet.

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 03:49
Zitat:
Warum eigentlich der Vergleich von PID mit der ProcID, die du über die gefüllte ProcList holst? Wozu dient das?
Die PID, die du mit SessionControl2.GetProcessID(PID); ermittelst, gibt dir doch eine gültige Process ID einer Audiosession?
Hier das Pic was ich bekomme wenn ich nicht die PID mit der ProcID vergleiche.
Ist schon seltsam das ganze

Frage mich was machen die Folder in der Liste.
Zitat:
Active Session = 1
DisplayName =
StateSession = AudioSessionStateInactive

IconPath =

SessionIdentifier = {0.0.0.00000000}.{e457a6b5-b413-4304-9b72-f8ba7de1d36a}|\Device\HarddiskVolume1\Program Files (x86)\TAudioVolume\Demo_Eng\AudioVolumeAdj_Eng.exe %b{00000000-0000-0000-0000-000000000000}

ProcessID = 876
IsSystemSoundsSession = 1

SessionGuid = {3502FB3B-A396-417B-AC93-9D135913288D}
Den Prozess AudioVolumeAdj_Eng.exe hatte ich eigentlich ausgeschlossen.
if PID <> GetCurrentProcessId) then Da ist noch einiges im Argen. LOL
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

Geändert von EWeiss (11. Jul 2019 um 16:51 Uhr)
  Mit Zitat antworten Zitat
TiGü

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

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 09:05
Da ist noch einiges im Argen. LOL
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.
Laut Screenshots deines Programms sind es acht Sessions. Laut Windows vier Anwendungen und ein Gerät/Systemsound.
Ist der Wert von FSessionCount ermittelt durch: HR := pEnumerator.GetCount(FSessionCount); , denn auch acht? => Debuggen!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 09:30
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
  Mit Zitat antworten Zitat
TiGü

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

AW: Das Handle ist ungültig

  Alt 4. Mai 2018, 09:38
inc(SCount, i); fällt dir was auf?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Das Handle ist ungültig

  Alt 3. Mai 2018, 14:07
Zitat:
Warum eigentlich der Vergleich von PID mit der ProcID, die du über die gefüllte ProcList holst? Wozu dient das?
Warum? Weil ich die Lautstärke vom gesamten System und die der Anwendungs Lautstärke aus den Session ausschließen möchte.
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:
ProcessName wird über OpenProcess() und GetModuleFileNameEx() geholt.
Wie gesagt hatte da immer ein ungültiges Handle aber nicht mit Zacherl's Funktion.

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
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
SessionControl2.GetProcessID(PID);
ermittelt wurde.

Somit muss ich NUR maximal 9 abfragen und nicht 100 und mehr.

gruss

Geändert von EWeiss (11. Jul 2019 um 16:51 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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:57 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 by Thomas Breitkreuz