Thema: Delphi Control Panel commands

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Control Panel commands

  Alt 18. Nov 2018, 09:50
Zitat:
Wär‘s du auch so nett, uns auch mittelst wie man an die ID‘s dran kommt?
Die Definition sollte klar sein, wurde oben schon gezeigt.
Delphi-Quellcode:
ShellExecute(MainHandle, 'open', PWideChar(GetSpecialFolder(CSIDL_SYSTEM) +
   '\control.exe '), 'mmsys.cpl,,2', '', SW_SHOWNORMAL);
oder
Delphi-Quellcode:
ShellExecute(MainHandle, 'open', PWideChar(GetSpecialFolder(CSIDL_SYSTEM) +
   '\control.exe '), 'mmsys.cpl,,sounds', '', SW_SHOWNORMAL);
weil meine Anwendung auch unter Koreanischer Flage laufen soll verwende ich anstelle von 'sounds' den Index des gewünschten Tab das angezeigt werden soll.
In dem fall ist das die 2.
Zitat:
control.exe mmsys.cpl, ,<endpoint-id>
Bei Wasapi ist es so das man die EndPoint-ID kennen muss vom aktuellen Device das gewählt wurde.
Diese ist in jedem System anders und ist nicht vererbbar deshalb ging mein Beispiel oben nicht weil diese ID von einem anderen System stammt.

Die ID bekommt man indem wir das Interface IMMDeviceCollection implementieren.
Anschließend enumeriert man die Device mit GetCount.
Die ID wird dann über den DeviceIndex der jeweiligen Collection zurück gegeben.

Delphi-Quellcode:
    HR := DeviceCollection_.Item(DeviceIndex, Device);
    if HR <> S_OK then
      raise Exception.Create('Unable to get IMMDevice interface for device #' + intToStr
          (DeviceIndex));

    HR := Device.GetId(DeviceId);
    if HR <> S_OK then
      raise Exception.Create('Unable to get device id for device #' + intToStr(DeviceIndex));

Device.GetId(DeviceId)
Bsp. Mein Device 'Lautsprecher (Realtek High Definition Audio)'
Code:
DeviceId = '{0.0.0.00000000}.{74088c25-4c92-4184-b938-5651c2eeb6fd}'
DeviceId liefert dann die ID des Device zurück diese muss man dann nur noch nach außen hin zur verfügung stellen.

öffnen kann man ihn dann auf diese weise..
Delphi-Quellcode:
ChangeFSRedirection(true);
ShellExecute(MainHandle, 'open', PWideChar(GetSpecialFolder(CSIDL_SYSTEM) +
  '\control.exe '), PWideChar('mmsys.cpl, ,' + MainClass.DeviceId), nil, SW_SHOWNORMAL);
ChangeFSRedirection(false);
Ja, ja man kommt auch anders an den system32 Pfad.. Ich mache es halt auf diese weise.

gruss

Geändert von EWeiss (18. Nov 2018 um 11:35 Uhr)
  Mit Zitat antworten Zitat