Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Lautstärke auf XP ändern mit delphi (https://www.delphipraxis.net/71347-lautstaerke-auf-xp-aendern-mit-delphi.html)

Noobinator 13. Jun 2006 17:24


Lautstärke auf XP ändern mit delphi
 
Hy leute

Ich brauche mal wieder eure geniale hilfe :wink:

und zwar bastele ich mir gerade einen Mediaplayer zusammen.
Nun ist das Ganze ein Schulprojekt, und auf unseren Schulrechnern ist die Systemlautstärke deaktiviert.
kann man diese irgendwie im Formcreate aktivieren, und dann die Lautstärke über ein Spinedit einstellen?

Ich habe schon Google und die SuFu gefordert, aber da habe ich nichts gefunden, was mir wirklich hilft.
Vielleicht bin ich auch zu dumm zum suchen :gruebel:

naja hoffe ihr könnt mir helfen

Mfg
Noobinator

Evian 13. Jun 2006 17:32

Re: Lautstärke auf XP ändern mit delphi
 
Geh mal zu den Schweizern und geb in die Suchleiste "Lautstärke" ein. Es gibt dort mehrere Artikel zu diesem Thema und der Code ist auch relativ einfach.

Noobinator 13. Jun 2006 20:52

Re: Lautstärke auf XP ändern mit delphi
 
Zitat:

Zitat von Evian
Geh mal zu den Schweizern und geb in die Suchleiste "Lautstärke" ein. Es gibt dort mehrere Artikel zu diesem Thema und der Code ist auch relativ einfach.

hmm ich check den trotzdem nicht...
könnte das mal bitte posten und kommentieren? wäre echt nett.
achso brauche nicht nur das ändern, sondern erstmal das aktivieren der Lautstärke.
Oder geht das automatisch? also dass der sound aktiviert wird, sobald man die Lautstärke hochschraubt?

SirThornberry 13. Jun 2006 22:38

Re: Lautstärke auf XP ändern mit delphi
 
schau mal hier, da ist die Funktion in 2facher Ausführung vorhanden:
http://www.delphipraxis.net/internal...ct.php?t=73473

Noobinator 14. Jun 2006 09:16

Re: Lautstärke auf XP ändern mit delphi
 
ich habe diesen Code jetzt in meine Unit eingebunden
[code=delphi]uses
MMSystem;

function GetMasterMute(
Mixer: hMixerObj;
var Control: TMixerControl): MMResult;
// Returns True on success
var
Line: TMixerLine;
Controls: TMixerLineControls;
begin
ZeroMemory(@Line, SizeOf(Line));
Line.cbStruct := SizeOf(Line);
Line.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
Result := mixerGetLineInfo(Mixer, @Line,
MIXER_GETLINEINFOF_COMPONENTTYPE);
if Result = MMSYSERR_NOERROR then
begin
ZeroMemory(@Controls, SizeOf(Controls));
Controls.cbStruct := SizeOf(Controls);
Controls.dwLineID := Line.dwLineID;
Controls.cControls := 1;
Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
Controls.cbmxctrl := SizeOf(Control);
Controls.pamxctrl := @Control;
Result := mixerGetLineControls(Mixer, @Controls,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
end;
end;

procedure SetMasterMuteValue(
Mixer: hMixerObj;
Value: Boolean);
var
MasterMute: TMixerControl;
Details: TMixerControlDetails;
BoolDetails: TMixerControlDetailsBoolean;
Code: MMResult;
begin
Code := GetMasterMute(0, MasterMute);
if Code = MMSYSERR_NOERROR then
begin
with Details do
begin
cbStruct := SizeOf(Details);
dwControlID := MasterMute.dwControlID;
cChannels := 1;
cMultipleItems := 0;
cbDetails := SizeOf(BoolDetails);
paDetails := @BoolDetails;
end;
LongBool(BoolDetails.fValue) := Value;
Code := mixerSetControlDetails(0, @Details,
MIXER_SETCONTROLDETAILSF_VALUE);
end;
if Code <> MMSYSERR_NOERROR then
raise Exception.CreateFmt('SetMasterMuteValue failure, '+
'multimedia system error #%d',
Code:
);
end;
und das ins Formcreate geschrieben:

Delphi-Quellcode:
SetMasterMuteValue(100,true);
nur irgendwie geht das doch nicht.
woran liegt das?

ok habe es Geschafft^^ mein Fehler lag hier:

Delphi-Quellcode:
SetMasterMuteValue(100,false);/false statt true
danke euch

Noobinator 14. Jun 2006 15:42

Re: Lautstärke auf XP ändern mit delphi
 
ok doch noch ne Frage.. wie kann ich mithilfe eines Spinedit die Lautstärke ändern?
habe das in diesem Quellcode nicht gefunden...
bräuchte ich noch...
MFG
Noobinator

mOzZzI 14. Jun 2006 20:07

Re: Lautstärke auf XP ändern mit delphi
 
Zitat:

Zitat von Noobinator
ok doch noch ne Frage.. wie kann ich mithilfe eines Spinedit die Lautstärke ändern?
habe das in diesem Quellcode nicht gefunden...
bräuchte ich noch...
MFG
Noobinator

Hi,
*Antwort aus dem Arm rüttel* :mrgreen:

Delphi-Quellcode:
{Timer auf die Form und im OnTimer Ereignis diesen Code einfügen}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 SetMasterMuteValue(spinedit1.Value,false);
end;
Grüße Philipp :zwinker:

SirThornberry 14. Jun 2006 20:21

Re: Lautstärke auf XP ändern mit delphi
 
mit dem oben geposteten source stellt man nur ein ob mute oder nicht. Die Lautstärke wird damit überhaupt nicht gesetzt.

mOzZzI 14. Jun 2006 20:30

Re: Lautstärke auf XP ändern mit delphi
 
Zitat:

Zitat von SirThornberry
mit dem oben geposteten source stellt man nur ein ob mute oder nicht. Die Lautstärke wird damit überhaupt nicht gesetzt.

SetMasterMuteValue :wall:

sry

Noobinator 14. Jun 2006 21:00

Re: Lautstärke auf XP ändern mit delphi
 
ja das habe ich auch gemerkt... aber wie geht jetzt die Lautstärke?

turboPASCAL 14. Jun 2006 21:19

Re: Lautstärke auf XP ändern mit delphi
 
Liste der Anhänge anzeigen (Anzahl: 2)
So:
[code=delphi]// GetMasterVolumeCtrl - Verwendung intern
//
function GetMasterVolumeCtrl(Mixer: hMixerObj;
var Control: TMixerControl): MMResult;
var
Line: TMixerLine;
Controls: TMixerLineControls;
begin
ZeroMemory(@Line, SizeOf(Line));
Line.cbStruct := SizeOf(Line);
Line.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
Result := mixerGetLineInfo(Mixer,
@Line,
MIXER_GETLINEINFOF_COMPONENTTYPE);
if Result = MMSYSERR_NOERROR then begin
ZeroMemory(@Controls, SizeOf(Controls));
Controls.cbStruct := SizeOf(Controls);
Controls.dwLineID := Line.dwLineID;
Controls.cControls := 1;
Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
Controls.cbmxctrl := SizeOf(Control);
Controls.pamxctrl := @Control;
Result := mixerGetLineControls(Mixer,
@Controls,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
end;
end;

// SetMasterVolume
// Verwendung: Setzen eines Wertes für das MasterVolume des Mixers

procedure SetMasterVolume(Value: Word);
var
MasterVolume: TMixerControl;
Details: TMixerControlDetails;
UnsignedDetails: TMixerControlDetailsUnsigned;
Mixer: hMixerObj;
Code: MMResult;
begin
MixerOpen(@Mixer, 0, 0, 0, 0);
Code := GetMasterVolumeCtrl(Mixer, MasterVolume);
if Code = MMSYSERR_NOERROR then begin
with Details do begin
cbStruct := SizeOf(Details);
dwControlID := MasterVolume.dwControlID;
cChannels := 1; // set all channels
cMultipleItems := 0;
cbDetails := SizeOf(UnsignedDetails);
paDetails := @UnsignedDetails;
end;
UnsignedDetails.dwValue := Value;
Code := mixerSetControlDetails(Mixer,
@Details,
MIXER_SETCONTROLDETAILSF_VALUE);
end;
if Code <> MMSYSERR_NOERROR then
raise Exception.CreateFmt('SetMasterVolume failure, ' +
'multimedia system error #%d',
Code:
);
end;

// GetMasterVolume
// Verwendung: akt. Wert des MasterVolumes des Mixers auslesen

function GetMasterVolume: Cardinal;
var
  MasterVolume: TMixerControl;
  Details: TMixerControlDetails;
  UnsignedDetails: TMixerControlDetailsUnsigned;
  Code: MMResult;
  Mixer: hMixerObj;
  mmError: Cardinal;
begin
  mmError := MixerOpen(@Mixer, 0, 0, 0, 0);
  if mmError <> MMSYSERR_NOERROR then
  begin
    raise Exception.CreateFmt('GetMasterVolume failure, ' +
      'multimedia system error #%d', [mmError]);
  end else
  begin
    Result := 0;
    Code := GetMasterVolumeCtrl(Mixer, MasterVolume);
    if (Code = MMSYSERR_NOERROR) then begin
      with Details do begin
        cbStruct := SizeOf(Details);
        dwControlID := MasterVolume.dwControlID;
        cChannels := 1; // set all channels
        cMultipleItems := 0;
        cbDetails := SizeOf(UnsignedDetails);
        paDetails := @UnsignedDetails;
      end;
      if (mixerGetControlDetails(Mixer,
        @Details,
        MIXER_GETCONTROLDETAILSF_VALUE) = MMSYSERR_NOERROR) then
        result := UnsignedDetails.dwValue;
    end;
  end;
end;
Der selbe Code nur einwenig anders um das Volume zu setzen.

Ein fertiges Beispiel im Anhang.

Noobinator 14. Jun 2006 22:05

Re: Lautstärke auf XP ändern mit delphi
 
Zitat:

Zitat von turboPASCAL
So:
Delphi-Quellcode:
....
Der selbe Code nur einwenig anders um das Volume zu setzen.

Ein fertiges Beispiel im Anhang.

Ich danke dir.

benst 13. Sep 2006 16:56

Re: Lautstärke auf XP ändern mit delphi
 
@turboPASCAL:
Dein Programm hat einen ganz kleinen Fehler :)
Anstatt
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
...
  // Wert als % in Label1.Caption anzeigen
  Label1.Caption :=
    format('%0.1f %%', [(Trackbar1.Position / MaxMixerMasterVolume) * 100]);
...
muss dort
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
...
  // Wert als % in Label1.Caption anzeigen
  Label1.Caption :=
    format('%0.1f %%', [((MaxMixerMasterVolume - Trackbar1.Position) / MaxMixerMasterVolume) * 100]);
...
stehen. Wenn man dein Programm start steht dort z.B. 5%, wobei die Lautstärke auf 95% steht. Wenn man die Tackbar anklickt ist es jedoch sofort behoben.
Vielen Dank für deinen Lautstärken-Code/ Programm, hat mich weitergebracht.
Ben


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz