Autor Beitrag
AndiG
Hält's aus hier
Beiträge: 6


Delphi 7 Personal
BeitragVerfasst: Mi 16.08.06 15:26 
Hallo,
Ich bin hier recht neu un hab gleich ma ne Frage!

Ich hab mir ein Programm geschrieben womit ich den Windows Media Player fernsteuern kann,also Play/Pause,nächstes/vorheriges Lied und Stop. Dazu hab ich auch noch systemweite Hotkeys definiert damit ich das Prog auch steuern kann wenn ich zB spiele.

Dazu hätte ich aber jetz auch gerne noch, dass ich die Lautstärke des WMP ändern kann.

Hatt dazu jemand eine Idee?

Ich weiss das es das Thema mit dem WMP fernsteuern schonmal gab aber da wurder nie die Frage nach der Lautstärke beantwortet.

MFG AndiG
patrick dee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 311

Win 98SE, WinXP
D3,D6
BeitragVerfasst: Do 17.08.06 10:47 
hi

die Lautstärke des MEdiaPlayers ändern. Habe ich das gefunden :

Category: Multimedia
Title: Set the Volume in a TMediaplayer
Date added: 15.03.2006
Hits: 317

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
uses 
  MPlayer, MMSystem; 
const 
  MCI_SETAUDIO = $0873; 
  MCI_DGV_SETAUDIO_VOLUME = $4002; 
  MCI_DGV_SETAUDIO_ITEM = $00800000; 
  MCI_DGV_SETAUDIO_VALUE = $01000000; 
  MCI_DGV_STATUS_VOLUME = $4019; 
type 
  MCI_DGV_SETAUDIO_PARMS = record 
    dwCallback: DWORD; 
    dwItem: DWORD; 
    dwValue: DWORD; 
    dwOver: DWORD; 
    lpstrAlgorithm: PChar; 
    lpstrQuality: PChar; 
  end; 
type 
  MCI_STATUS_PARMS = record 
    dwCallback: DWORD; 
    dwReturn: DWORD; 
    dwItem: DWORD; 
    dwTrack: DWORD; 
  end; 

procedure SetMPVolume(MP: TMediaPlayer; Volume: Integer); 
  { Volume: 0 - 1000 } 
var 
  p: MCI_DGV_SETAUDIO_PARMS; 
begin 
  { Volume: 0 - 1000 } 
  p.dwCallback := 0; 
  p.dwItem := MCI_DGV_SETAUDIO_VOLUME; 
  p.dwValue := Volume; 
  p.dwOver := 0; 
  p.lpstrAlgorithm := nil; 
  p.lpstrQuality := nil; 
  mciSendCommand(MP.DeviceID, MCI_SETAUDIO, 
    MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p)); 
end; 

function GetMPVolume(MP: TMediaPlayer): Integer; 
var 
  p: MCI_STATUS_PARMS; 
begin 
  p.dwCallback := 0; 
  p.dwItem := MCI_DGV_STATUS_VOLUME; 
  mciSendCommand(MP.DeviceID, MCI_STATUS, MCI_STATUS_ITEM, Cardinal(@p)); 
  Result := p.dwReturn; 
  { Volume: 0 - 1000 } 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  SetMPVolume(MediaPlayer1, 500); 
end;

_________________
Glauben heißt nichts wissen ...
AndiG Threadstarter
Hält's aus hier
Beiträge: 6


Delphi 7 Personal
BeitragVerfasst: Do 17.08.06 16:39 
erst ma danke für doe antwort

aaaber es geht ja um den Windows media player un nich die Tmediaplayer komponente...

sonst wer ne idee?
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 17.08.06 17:35 
Wie machst du denn die anderen Befehle? Also Play, Pasuse, Next usw.?
Ich kenn mich damit nicht aus, aber so viel anders kann es doch nicht sein.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
AndiG Threadstarter
Hält's aus hier
Beiträge: 6


Delphi 7 Personal
BeitragVerfasst: Do 17.08.06 18:24 
also die andern befehle mach ich mit nem send message un nem bestimmten Hex-Wert die ich aus nem andern Thread hab, da wurd aba nix von wegen Lautstärke gesacht. Un ich hab keine lust sämmtliche Hex-Werte durchzuprobieren^^(könnt was dauern)

also zuerst hab ich in Konstanten die Hex werte für Play,pause,... gespeichert:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  const NEXTTRACK     = $B0000;
        PREVIOUSTRACK = $C0000;
        STOP          = $D0000;
        PLAY_PAUSE    = $E0000;


dann hab ich ich das window-handle des WMP ermittelt und in der sendmessage die constatnten un das handle übergeben:(beispiel mit play/pause)
ausblenden Delphi-Quelltext
1:
2:
      wnd :=  FindWindow('WMPlayerApp', 'Windows Media Player');
      if wnd <> 0 then Sendmessage(wnd, $00319, 0,play_pause);


hoffentlich kann mir hier wer die hex-codes für die Lautstärke++ un -- sagen oda jemand sacht mir ne andere lösung oda ich verzweifel hier noch.

danke mfg andi
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 17.08.06 19:25 
Ich hab hier was zum Thema, auch wenn es etwas anders gelöst wird, Zum Beispiel benutzt du WM_APPCOMMAND, im Beispiel wird WM_COMMAND genommen. Dazu gibt es auch andere Konstanten, die Methode sollte aber übertragbar sein.
Falls du wie ich grade kein Spy++ vorrätig hast, hier gibts ein Freeware-Tool: www.windows-spy.com/

www.codeproject.com/csharp/wmp_pinvoke.asp

Ich hoffe mal, das hilft dir bei deinem Problem.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
AndiG Threadstarter
Hält's aus hier
Beiträge: 6


Delphi 7 Personal
BeitragVerfasst: Fr 18.08.06 10:33 
danke das hat mich vll nen stück weitergebracht aba ich komme immer noch nich an diesen code ran. ich glaub ich lös das problem einfach si das ich die gesamte systemlautstärke änder,war zwar nich das was ich wollte aba wens anders net geht.

danke für eure hilfe

mfg andig