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.