![]() |
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 |
Re: Lautstärke auf XP ändern mit delphi
Geh mal zu
![]() |
Re: Lautstärke auf XP ändern mit delphi
Zitat:
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? |
Re: Lautstärke auf XP ändern mit delphi
schau mal hier, da ist die Funktion in 2facher Ausführung vorhanden:
![]() |
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:
und das ins Formcreate geschrieben:
);
end;
Delphi-Quellcode:
nur irgendwie geht das doch nicht.
SetMasterMuteValue(100,true);
woran liegt das? ok habe es Geschafft^^ mein Fehler lag hier:
Delphi-Quellcode:
danke euch
SetMasterMuteValue(100,false);/false statt true
|
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 |
Re: Lautstärke auf XP ändern mit delphi
Zitat:
*Antwort aus dem Arm rüttel* :mrgreen:
Delphi-Quellcode:
Grüße Philipp :zwinker:
{Timer auf die Form und im OnTimer Ereignis diesen Code einfügen}
procedure TForm1.Timer1Timer(Sender: TObject); begin SetMasterMuteValue(spinedit1.Value,false); end; |
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.
|
Re: Lautstärke auf XP ändern mit delphi
Zitat:
sry |
Re: Lautstärke auf XP ändern mit delphi
ja das habe ich auch gemerkt... aber wie geht jetzt die Lautstärke?
|
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:
Der selbe Code nur einwenig anders um das Volume zu setzen.
);
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; Ein fertiges Beispiel im Anhang. |
Re: Lautstärke auf XP ändern mit delphi
Zitat:
|
Re: Lautstärke auf XP ändern mit delphi
@turboPASCAL:
Dein Programm hat einen ganz kleinen Fehler :) Anstatt
Delphi-Quellcode:
muss dort
procedure TForm1.FormCreate(Sender: TObject);
begin ... // Wert als % in Label1.Caption anzeigen Label1.Caption := format('%0.1f %%', [(Trackbar1.Position / MaxMixerMasterVolume) * 100]); ...
Delphi-Quellcode:
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.
procedure TForm1.FormCreate(Sender: TObject);
begin ... // Wert als % in Label1.Caption anzeigen Label1.Caption := format('%0.1f %%', [((MaxMixerMasterVolume - Trackbar1.Position) / MaxMixerMasterVolume) * 100]); ... 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