Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Control Panel commands (https://www.delphipraxis.net/198595-control-panel-commands.html)

EWeiss 16. Nov 2018 17:34


Control Panel commands
 
Mit dem Befehl öffne ich das Control Panel für Multimedia und dem geöffneten Tab Sounds
Delphi-Quellcode:
             
ShellExecute(MainHandle, 'open', PWideChar(GetSpecialFolder(CSIDL_SYSTEM) +
  '\control.exe '), 'mmsys.cpl,,2', '', SW_SHOWNORMAL);
Jetzt möchte ich den für den Lautsprecher öffnen.
Zitat:

control.exe mmsys.cpl, ,<endpoint-id>
control.exe mmsys.cpl, ,{0.0.0.00000000}.{3737a710-7f79-4359-9073-e6da499920a0}
so wie gelesen soll das funktionieren tut es aber nicht wirklich.

jemand eine Liste wo ich die korrekten endpoint-IDs herbekomme?
Oder kennt jemand eine andere Zeichenfolge die mir den Lautsprecher Tab öffnet.

gruss

EWeiss 17. Nov 2018 22:30

AW: Control Panel commands
 
Beantworte es selbst funktioniert jetzt egal welches Device ausgewählt wurde.
Als Beispiel LineIn.

Es funktioniert mit den ID's wenn man denn weis wie man dran kommt und es die richtige ist.

gruss

Hobbycoder 18. Nov 2018 08:16

AW: Control Panel commands
 
Zitat:

Zitat von EWeiss (Beitrag 1418358)
Beantworte es selbst funktioniert jetzt egal welches Device ausgewählt wurde.
Als Beispiel LineIn.

Es funktioniert mit den ID's wenn man denn weis wie man dran kommt und es die richtige ist.

gruss

Wär‘s du auch so nett, uns auch mittelst wie man an die ID‘s dran kommt? Auch wenn Dir hier keiner die Antwort nennen konnte, was vielleicht bedeutet, dass es eben auch keiner wusste, wäre es für den nächsten, der genau sowas sucht, eine echte Hilfe, wenn du deine Erkenntnis mit den anderen Forennutzern teils.

KodeZwerg 18. Nov 2018 09:22

AW: Control Panel commands
 
Ich kenne nur ein paar standards.
Zitat:

Multimedia/Sounds Options (MMSYS.CPL)
------------------------------------------
Multimedia Properties (Audio):
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
Multimedia Properties (Video):
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1
Multimedia Properties (MIDI):
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
Multimedia Properties (CD Music):
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
Multimedia Properties (Advanced):
rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4

EWeiss 18. Nov 2018 09:50

AW: Control Panel commands
 
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));

Delphi-Quellcode:
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 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