AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Systemlautstärke ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Systemlautstärke ändern

Offene Frage von "himitsu"
Ein Thema von CodeX · begonnen am 13. Jun 2011 · letzter Beitrag vom 14. Jun 2011
Antwort Antwort
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#1

Systemlautstärke ändern

  Alt 13. Jun 2011, 01:47
Hi, ich würde gerne die Lautstärke des Systems aus einem Delphi-Programm heraus ändern können. Sämtliche Beispiele, die ich gefunden habe, funktionieren bei mir leider nicht. Ich vermute stark, dass diese schlicht nicht mit Win7 kompatibel sind. Die Funktion müsste für mich jedoch in allen Windows-Versionen ab Win2000 funktioneren.

Gibt es eine universelle Funktion? Falls nein, so könnte man die verwendete Funktion abhängig vom eigesetzten System durchlaufen lassen, aber auch dafür bräuchte ich erstmal eine funktionierende Funktion für Vista/7.

Hat jemand eine Lösung?
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Systemlautstärke ändern

  Alt 13. Jun 2011, 02:01
http://blogs.msdn.com/b/alejacma/arc...matically.aspx
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Systemlautstärke ändern

  Alt 13. Jun 2011, 03:12
http://www.delphipraxis.net/1035334-post12.html
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Systemlautstärke ändern

  Alt 13. Jun 2011, 16:59
Vielen Dank Euch beiden!
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Systemlautstärke ändern

  Alt 13. Jun 2011, 19:02
Noch mal ne Anmerkung zur Apidatei:

http://www.delphipraxis.net/1106085-post10.html
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#6

AW: Systemlautstärke ändern

  Alt 13. Jun 2011, 23:34
Habe doch noch ein kleines Problem damit.
Zwar geht mit der MMDevApi-Methode das Einstellen der Lautstärke und Stummschaltung problemlos, und auch das Auslesen der Lautstärke klappt, jedoch erhalte ich beim Auslesen der Stummschaltung eine Zugriffsverletzung und ich habe keine Ahnung, woran das liegen könnte.

Im Prinzip ist die Funktion fast genau so wie beim Auslesen der Lautstärke (was ja klappt):
Delphi-Quellcode:
function GetMuteVista : Boolean;
var
  mute : Boolean;
  deviceEnumerator: IMMDeviceEnumerator;
  defaultDevice: IMMDevice;
  endpointVolume: IAudioEndpointVolume;
begin
  endpointVolume := nil;

  CoCreateInstance(CLASS_IMMDeviceEnumerator, nil, CLSCTX_INPROC_SERVER, IID_IMMDeviceEnumerator, deviceEnumerator);
  deviceEnumerator.GetDefaultAudioEndpoint(eRender, eConsole, defaultDevice);
  defaultDevice.Activate(IID_IAudioEndpointVolume, CLSCTX_INPROC_SERVER, nil, endpointVolume);

  if endpointVolume = nil then Exit;

  endpointVolume.GetMute(mute);
  Result := mute;
end;
Die Funktion läuft auch problemlos durch und auch der Resultwert wird korrekt gesetzt. Allerdings erfolgt anschließend dennoch eine Zugriffsverletzung. Woran könnte das denn liegen? Muss noch etwas freigegeben werden? Mir sind diese ActiveX-Geschichten eh immer ein Rätsel...
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#7

AW: Systemlautstärke ändern

  Alt 14. Jun 2011, 00:07
GetMute ... BOOL ist aktuell (unter 32 Bit) ein LongBool und kein Boolean/ByteBool.
Windows nutzt einen Bool-Typen, von der größe eines Integer, wärend Delphi den kleinsmöglichen Vollbytetypen nutzt, also ein Byte.

Mit etwas Glück überschreibst du dir da ein paar wichtige Daten.


Ach ja, Boolean und ByteBool sind zwar leich groß, aber von der Definition der Werte her, sind sie unterschiedlich.

False ist immer 0
True bei Boolean ist eine 1, also die Konstante True,
wärend es beim ByteBool/WordBool/LongBool ein -1 ist.
Bei der Abfrage ist es aber überall ein <>0.

PS: Das ist auch der Grund, warum if b = true then ein fataler Fehler sein kann.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Jun 2011 um 00:12 Uhr)
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#8

AW: Systemlautstärke ändern

  Alt 14. Jun 2011, 00:13
Tatsache ... wenn ich den Rückgabewert als LongBool deklariere, funktioniert es. Vielen Dank!
Aber woher weiß man denn sowas? In der verlinkten MMDevApi war nur von "Boolean" die Rede. Das habe ich dann auch verwendet...
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#9

AW: Systemlautstärke ändern

  Alt 14. Jun 2011, 00:57
Das stand im MSDN?
http://msdn.microsoft.com/en-us/library/dd368037.aspx

Man kann sich auch das PSDK downloaden.
Unten im MSDN steht ein Header (Endpointvolume.h) und diese Headerdatei befindet sich auch im PSDK.

PS: Das ist auch der Grund, warum C-Programme es im Allgemeinem einfacher haben, da man sie direkt gegen diese Header kompilieren kann
und man dann keine Überstzungsfehler abbekommt.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Jun 2011 um 01:01 Uhr)
  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 23: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