Wenn Volume den Wert $19999999 hätte, dann wäre das dezimal 429496729 (nicht 4294967295)
Anders herum, wenn Volume den Wert dezimal 4294967295 hätte dann wäre das $FFFFFFFF.
Da (bei mir) im Debugger die dezimalen Werte angezeigt werden, vermute ich, dass Volume den Wert 4294967295 = $FFFFFFFF hat und du beim Umrechnen die am Ende stehende 5 vergessen hast.
Der Debugger schmeißt 4294967295 heraus. Jetzt ist mir aber auch aufgefallen das ich FALSCH in HEXA hab umrechnen lassen. Und zwar wurde der Wert dort als SIGNED betrachtet. was Quatsch ist.
4294967295 = $FFFFFFFF
damit stimmt die Umwandlung von DWORD zu WORD wohl, das Problem ist das die Funktion
WaveOutGetVolume(uDeviceId, @Volume) = MMSYSERR_NOERROR;
Meint es wäre alles richtig in Volume übertragen aber das stimmt anscheinend nicht denn die Lautstärken sind alle auf 50%. Warum ich den Umweg über ein Array gehen soll wenn es dafür Funktionen gibt bleibt mir ein Rätsel.
Grüße Frank