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
 
EWeiss
(Gast)

n/a Beiträge
 
#32

AW: Das Handle ist ungültig

  Alt 3. Mai 2018, 10:27
Zitat:
Laufen die Programme vielleicht als Administrator ("Als Administrator ausführen")? Dann kann OpenProcess so nicht funktionieren.
IExplorer und SideBar? denke schon.

Zitat:
Woher kommt die Variable PID? Oder um die Frage vielleicht klarer zu stellen: Wie ermittelst du den Wert von PID?
Delphi-Quellcode:
            HR := SessionControl2.GetProcessID(PID);
            if Succeeded(HR) then
            begin
              FAudioSessionList[Index].ProcessID := intToStr(PID);
              HR := SessionControl2.GetState(State);
              if Succeeded(HR) then
              begin
                if PID = ProcId then
                begin
                  if State <> uint(TAudioSessionState.AudioSessionStateExpired) then
                  begin
Zitat:
Ansonsten machst du was falsch.
möglich
Sonst würde ja alles funktionieren.

Anwendung..
Delphi-Quellcode:
    AudioVolume[i].GetSessionCount(AudioVolume1.Device);
    if AudioVolume1.AudioSessionInfo(i).PID <> 0 then
Delphi-Quellcode:
function TAudioVolume.GetSessionCount(AudioDevice: IMMDevice): integer;
var
  SessionControl2: IAudioSessionControl2;
  SessionControl: IAudioSessionControl;
  pEnumerator: IAudioSessionEnumerator;
  SCount: Integer;
  PID, ProcId: DWORD;
  State: uint;
  HR: HResult;
  i, j: integer;
  ProcList: TStringList;
begin

  ProcList := TStringList.Create;
  SCount := 0;

  GetProzessList(ProcList);
  if Assigned(SessionManager2) then
  begin
    HR := AudioDevice.Activate(IID_IAudioSessionManager2, CLSCTX_ALL, nil, IUnknown(SessionManager2)
      );
    if Succeeded(HR) then
    begin
      // get SessionQuery
      HR := SessionManager2.GetSessionEnumerator(pEnumerator);
      if Succeeded(HR) then
      begin
        HR := pEnumerator.GetCount(FSessionCount);
        if Succeeded(HR) then
          Setlength(FAudioSessionList, FSessionCount + 1);
        if Succeeded(HR) then
        begin
          for i := 0 to FSessionCount - 1 do
          begin
            HR := pEnumerator.GetSession(i, SessionControl);
            if Succeeded(HR) then
            begin
              HR := SessionControl.QueryInterface(IAudioSessionControl2, SessionControl2);
              if Succeeded(HR) then
              begin
                HR := SessionControl2.GetProcessID(PID);
                if Succeeded(HR) then
                begin
                  HR := SessionControl2.GetState(State);
                  if Succeeded(HR) then
                  begin
                    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;
                  end;
                end;
              end;
              SessionControl2 := nil;
            end;
            SessionControl := nil;
          end;
        end;
      end;
      pEnumerator := nil;
    end;
  end;
  ProcList.free;
  Result := SCount;
end;
Ok hier GetSessionCount muss ich noch was tun es dauert einfach zu lange für jedes control diese Funktion zu durchlaufen.

gruss

Geändert von EWeiss ( 3. Mai 2018 um 11:07 Uhr)
  Mit Zitat antworten Zitat
 


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 20:56 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