AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TAudioVolume Komponente incl. System Mixer
Thema durchsuchen
Ansicht
Themen-Optionen

TAudioVolume Komponente incl. System Mixer

Ein Thema von EWeiss · begonnen am 6. Mai 2018 · letzter Beitrag vom 24. Jul 2019
Antwort Antwort
TiGü

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

AW: TAudioVolume Komponente incl. System Mixer

  Alt 8. Mai 2018, 08:45
Siehe Bild:
Miniaturansicht angehängter Grafiken
mmres.jpg  
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: TAudioVolume Komponente incl. System Mixer

  Alt 8. Mai 2018, 08:48
Zitat:
Für solche Fälle einfach den "Resource Hacker" verwenden, dann muss keiner rumrätseln.
Wie lange habe ich den schon 10 -> 15 Jahre ?
Du kannst aber sehn das man sich auf die DLL und die Ordinal Nummer nicht verlassen kann.
Bei mir Win7.

gruss

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

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

AW: TAudioVolume Komponente incl. System Mixer

  Alt 8. Mai 2018, 09:06
Wenn man Windows-Funktionen nachbaut, dann kommt man nicht drum herum für die verschiedenen Windows-Versionen entsprechende Pfade zu bauen.

Delphi-Quellcode:
if WindowsVersionAnnoDazumal then
...
else if WindowsVersionEtwasNeuer then
...
else
...
end.
Aber ich weiß schon was du als nächstes schreiben wirst:
Zitat:
"Ich nutze aber Windows 7 und will kein Windows 10 und werde es auch nicht unterstützen. Macht doch was ihr wollt! Ich bin raus! LOL!

gruss"
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#4

AW: TAudioVolume Komponente incl. System Mixer

  Alt 8. Mai 2018, 16:41
Du kannst aber sehn das man sich auf die DLL und die Ordinal Nummer nicht verlassen kann.
Lad die Ressource doch einfach mit ihrem Namen - in dem Fall 3010 - und gib der Funktion zum Laden der Ressource die passenden Flags mit, so dass das Icon mit den richtigen Dimensionen und Farbtiefe geladen wird.

Grüße
Dalai
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: TAudioVolume Komponente incl. System Mixer

  Alt 8. Mai 2018, 17:29
Du kannst aber sehn das man sich auf die DLL und die Ordinal Nummer nicht verlassen kann.
Lad die Ressource doch einfach mit ihrem Namen - in dem Fall 3010 - und gib der Funktion zum Laden der Ressource die passenden Flags mit, so dass das Icon mit den richtigen Dimensionen und Farbtiefe geladen wird.

Grüße
Dalai
Hast du mal hier geschaut?
https://www.delphipraxis.net/1401628-post31.html

Kannst du ein Icon sehen?
Wenn ja dann ist das Problem schon 12 Beiträge vorher erledigt gewesen.

Delphi-Quellcode:
function TAudioVolume.SetSysItemIcon(wsItems: PWideChar): TIcon;
var
  fi: TSHFileInfoW;
begin
  Result := nil;

  ZeroMemory(@fi, SizeOf(TSHFileInfo));
  if SHGetFileInfoW(PWideChar(wsItems), 0, fi, SizeOf(TSHFileInfo),
    SHGFI_DISPLAYNAME Or SHGFI_SYSICONINDEX or SHGFI_LARGEICON or SHGFI_ICON) <> 0 then
  begin
    Icon := TIcon.Create;
    Icon.Handle := fi.HICON;
    Result := Icon;
  end;

end;
Delphi-Quellcode:
var
  WinDir: array [0..MAX_PATH] of WideChar;
//...
    FillChar(WinDir, sizeof(WinDir), 0);
    GetWindowsDirectory(WinDir, MAX_PATH);
    MasterImg.Picture.Icon := SetSysItemIcon(PWideChar(WinDir + '\System32\SndVol.exe'));

Oh.. danke
Zitat:
"Ich nutze aber Windows 7 und will kein Windows 10 und werde es auch nicht unterstützen. Macht doch was ihr wollt! Ich bin raus! LOL!

gruss"
Ich bekomme es schon vorgeschrieben.
Tigü mein Hasi.. Nehme mir bitte nicht so viel Arbeit ab, habe dann ja nichts mehr zu tun

Zitat:
dann kommt man nicht drum herum
Doch in dem man die entsprechende API verwendet.
Es zwingt mich niemand das Icon über die Ordinal Nummer zu laden das geht auch anders.

gruss

Geändert von EWeiss ( 9. Mai 2018 um 05:46 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: TAudioVolume Komponente incl. System Mixer

  Alt 8. Mai 2018, 22:23
Neue Version nur Master Icon addiert.
Mache jetzt erst mal pause mit dem Kram wegen den Event Problemen.
Hier ein Beispiel!
Delphi-Quellcode:
unit AudioSessionNotification;

interface

uses
  Windows, Messages, Classes, AudioSessionControl, Constants;

type
   IAudioSessionNotification = interface(IUnknown)
  ['{641DD20B-4D41-49CC-ABA3-174B9477BB08}']
    function OnSessionCreated(const NewSession: IAudioSessionControl): HResult; stdcall;
  end;

  TAudioSessionNotification = class(TInterfacedObject, IAudioSessionNotification)
  private
    MsgHandle: HWND;
  public
    function OnSessionCreated(const NewSession: IAudioSessionControl): HResult; stdcall;
    procedure SetMsgHandle(WinHandle: HWND);
  end;

implementation

{ TSessionNotification }

function TAudioSessionNotification.OnSessionCreated(const NewSession: IAudioSessionControl): HResult;
begin
  PostMessage(MsgHandle, WM_SessionCreate, integer(@NewSession), 0);

  Result := S_OK;
end;

procedure TAudioSessionNotification.SetMsgHandle(WinHandle: HWND);
begin

  MsgHandle := WinHandle;
end;

end.
Ich erstelle das Event.
Delphi-Quellcode:
TAudioVolume.Create..
var
  ISessionNotification: TAudioSessionNotification;
//...
// SessionNotification
ISessionNotification := TAudioSessionNotification.Create;
ISessionNotification.SetMsgHandle(FEventHandle);
SessionNotification := ISessionNotification;
Dann registriere ich das Notification
Delphi-Quellcode:
// Register TAudioSessionNotification to receive a notification when a session is created.
HR := SessionManager2.RegisterSessionNotification(SessionNotification);
if HR <> S_OK then
  raise Exception.Create('Error : Unable to Register Session Notification');
Jetzt sollte hier wenn eine neue Session erstellt wird außerhalb der Anwendung
Delphi-Quellcode:
function TAudioSessionNotification.OnSessionCreated(const NewSession: IAudioSessionControl): HResult;
begin
  PostMessage(MsgHandle, WM_SessionCreate, integer(@NewSession), 0);

  Result := S_OK;
end;
Das Event feuern tut es aber nicht auch das nicht OnSessionDisconnected.
Das war nur zur Info.

Ihr habt den Source also tobt euch aus.

gruss

Geändert von EWeiss ( 8. Mai 2018 um 23:00 Uhr)
  Mit Zitat antworten Zitat
TiGü

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

AW: TAudioVolume Komponente incl. System Mixer

  Alt 9. Mai 2018, 08:39
Diese Zeilen bedürfen einen Überarbeitung:

Delphi-Quellcode:
procedure TAudioVolume.WMSize(var Message: TWMSize);
var
  WinDir: array [0..MAX_PATH] of WideChar;
begin
...
    FillChar(WinDir, sizeof(WinDir), 0);
    GetWindowsDirectory(WinDir, MAX_PATH);
    MasterImg.Picture.Icon := SetSysItemIcon(PWideChar(WinDir + '\System32\SndVol.exe'));
Bei jedem Resize (und das sind bis zum ersten Zeigen des Formulars schon sechs) wird ein Icon erstellt. Das vorige wird aber nie freigegeben -> Speicherleck.
Das Ermitteln des Windows Directory und das Setzen des Icons brauchst du ja nicht bei jedem Resize machen.
Schiebe das und die Erzeugung von MasterImg in procedure TAudioVolume.SetMasterComponents; .

Geändert von TiGü ( 9. Mai 2018 um 08:50 Uhr)
  Mit Zitat antworten Zitat
TiGü

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

AW: TAudioVolume Komponente incl. System Mixer

  Alt 9. Mai 2018, 09:01
Hm...die anderen Icons von den Anwendungen leaken auch...versuch mal, ob du das schöner hinkriegst.
  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 10:27 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