AW: Das Handle ist ungültig
Zitat:
https://msdn.microsoft.com/de-de/lib...(v=vs.85).aspx Zitat:
GetSessionIdentifier gibt übrigens immer etwas zurück, auch unter Windows 7. |
AW: Das Handle ist ungültig
Zitat:
Ich liste alle Prozesse auf addiere diese zu einer liste und prüfe ob irgendeiner davon diese Bedingung erfüllt.
Delphi-Quellcode:
if State <> uint(TAudioSessionState.AudioSessionStateExpired) then
Zitat:
Wenn du das meinst ? Ja! Zitat:
Delphi-Quellcode:
(Ok war\ist eh leer von daher erst mal egal)
CoTaskMemFree(pDisplayName);
Zitat:
Es wird also geprüft ob es sich um eine echte Anwendung handelt, wenn ja wird nix zurück gegeben um zu verhindern das Developer den Mixer in dieser Art nachahmen können. Diese Funktion ist dann einfach Nutzlos. gruss |
AW: Das Handle ist ungültig
Mein Problem ist also..
Ich muss den DisplayNamen bzw.. den Pfad zum IconPath selbst vorher setzen. Macht irgendwo keine sinn. Es wären zwei funktionsaufrufe die letztendlich für die Katz sind wenn ich anschließend selbst noch das Icon bzw. den DisplayNamen selbst noch suchen muss. Das würde also ausreichen.
Delphi-Quellcode:
kann mir das dann schenken und muss anstelle dessen versuchen den Korrekten Namen zu analysieren.
FAudioSessionList[Index].DisplayName := pDisplayName;
if AudioSessionInfo(Index).DisplayName = '' then FAudioSessionList[Index].DisplayName := ExtractFileName (ChangeFileExt(GetBaseNameFromPID(PID), '')); CoTaskMemFree(pDisplayName);
Delphi-Quellcode:
GetBaseNameFromPID
Hmm.. was für ein schmarrn ;) gruss |
AW: Das Handle ist ungültig
Zitat:
Hier nochmal auf Deutsch: Zitat:
Was heißt das also? Es besagt, dass es für Programme wie Skype, Chrome, Internet Explorer, FireFox, WinAmp, VLC KEINE Pflicht ist, das Interface IAudioSessionControl zu implementieren bzw. die Methode SetDisplayName aufzurufen. Keine Ahnung, was du eigentlich bezwecken möchtest??? Wahrscheinlich setzt du einfach voraus, dass wir alle deine Beiträge lesen und wir daher genau wissen, woran du arbeitest und den Rest können wir uns gefälligst selber zusammenreimen. Wäre ja auch noch schöner, ein vollständiges Gegeben, Gesucht und zumindest einen Lösungsansatz zu verlangen. :o Möchtest eine der folgenden Informationen?
Code:
- - - - - - - - - - - - - - - - - -
SessionIndex: 0 SessionIdentifier: {0.0.0.00000000}.{18e53891-8712-4c0d-9aab-e23e4b813b96}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2} SessionInstanceIdentifier: {0.0.0.00000000}.{18e53891-8712-4c0d-9aab-e23e4b813b96}|#%b{A9EF3FD9-4240-455E-A4D5-F2B3301887B2}|12%b# DisplayName: @%SystemRoot%\System32\AudioSrv.Dll,-202 IconPath: @%SystemRoot%\System32\AudioSrv.Dll,-203 Process ID: 0 - - - - - - - - - - - - - - - - - - SessionIndex: 1 SessionIdentifier: {0.0.0.00000000}.{18e53891-8712-4c0d-9aab-e23e4b813b96}|\Device\HarddiskVolume4\Program Files (x86)\Google\Chrome\Application\chrome.exe%b{00000000-0000-0000-0000-000000000000} SessionInstanceIdentifier: {0.0.0.00000000}.{18e53891-8712-4c0d-9aab-e23e4b813b96}|\Device\HarddiskVolume4\Program Files (x86)\Google\Chrome\Application\chrome.exe%b{00000000-0000-0000-0000-000000000000}|12%b13524 DisplayName: IconPath: Process ID: 13524 ProcessName: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe - - - - - - - - - - - - - - - - - - SessionIndex: 2 SessionIdentifier: {0.0.0.00000000}.{18e53891-8712-4c0d-9aab-e23e4b813b96}|\Device\HarddiskVolume4\Program Files (x86)\Skype\Phone\Skype.exe%b{00000000-0000-0000-0000-000000000000} SessionInstanceIdentifier: {0.0.0.00000000}.{18e53891-8712-4c0d-9aab-e23e4b813b96}|\Device\HarddiskVolume4\Program Files (x86)\Skype\Phone\Skype.exe%b{00000000-0000-0000-0000-000000000000}|12%b184 DisplayName: IconPath: Process ID: 184 ProcessName: C:\Program Files (x86)\Skype\Phone\Skype.exe |
AW: Das Handle ist ungültig
Zitat:
Zitat:
Also muss ich hier den DisplayNamen und den Pfad zum Icon selber setzen.. Ist das jetzt deutlich genug? Zitat:
Du musst mich auch nicht auf diese Art hier belehren das mag ich gar nicht!. :evil: Zudem bringen mir deine Infos nichts denn die Strings bleiben wie zuvor leer. Auch wenn bsp. Winamp Zitat:
Zum IExplorer habe ich ja schon einen Shot geschickt. (Es geht also) So nun mit all deinen klugen Sprüchen (Belehrungen) wenn MS es kann warum funktioniert es dann nicht bei mir? Ach vergiss es einfach.. Ich finde eine Lösung dessen kannst du sicher sein! gruss |
AW: Das Handle ist ungültig
Zitat:
|
AW: Das Handle ist ungültig
Zitat:
Was ich möchte.. das TAudioVolume auf einen Kompletten Mixer erweitern so wie er sichtbar wird wie wenn man im Tray auf das Lautsprecher Symbol klickt. EDIT: Schlage mich jetzt mit der Änderung rum. Durch die Änderung auf GetProcessImageFileNameW habe ich nun Probleme den korrekten Pfad zu Anwendung zu finden um das Icon zu setzen. Muss diesen Pfad Zitat:
Und so geht es immer weiter.. ;)
Delphi-Quellcode:
FullPath ist leer.. :)
a := MAX_PATH;
GetVolumePathNamesForVolumeNameW(PWideChar(FAudioSessionList[Index].IconPath), @FullPath, MAX_PATH, a); SetSysItemIcon(FullPath); gruss |
AW: Das Handle ist ungültig
Zitat:
Du hast den vollständigen Processpfad/-dateinamen, du hast das Process Handle, du hast die Process ID...woran scheitert es jetzt genau? Hier noch ein Schups in die richtige Richtung, weil heute Donnerstag ist:
Delphi-Quellcode:
procedure ExtractIcons(const FileName: string);
var IconCount: Cardinal; I: Integer; IconHandle: HICON; begin IconCount := ExtractIcon(HInstance, PChar(FileName), UINT(-1)); if IconCount <> 0 then begin for I := 0 to IconCount - 1 do begin IconHandle := ExtractIcon(HInstance, PChar(FileName), I); if IconHandle <> 0 then begin // mach irgendwas mit dem Icon Handle // . . . // am Ende freigeben DestroyIcon(IconHandle); end; end; end; end; |
AW: Das Handle ist ungültig
Zitat:
Delphi-Quellcode:
SessionControl2.GetProcessId(ProcessId);
Writeln('Process ID: ', ProcessId); ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessId); if ProcessHandle <> 0 then begin if GetModuleFileNameEx(ProcessHandle, 0, ProcessName, MAX_PATH) <> 0 then begin Writeln('ProcessName: ', ProcessName); end; CloseHandle(ProcessHandle); end; |
AW: Das Handle ist ungültig
Zitat:
Nicht nur GetModuleBaseName (gibt den ExeNamen ohne Pfad zurück) verursacht diesen Fehler auch GetModuleFileNameEx (ExeNamen inklusive Pfad) Hier gibt es den Fehler das mein Handle ungültig ist. Deshalb haben wir es doch geändert. Zitat:
Delphi-Quellcode:
gruss
procedure TAudioVolume.SetSysItemIcon(wsItems: PWideChar);
var fi: TSHFileInfo; begin ZeroMemory(@fi, sizeof(TSHFileInfo)); if SHGetFileInfo(wsItems, 0, fi, sizeof(TSHFileInfo), SHGFI_DISPLAYNAME Or SHGFI_SYSICONINDEX or SHGFI_LARGEICON or SHGFI_ICON) <> 0 then Icon := fi.HICON; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 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