Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 10.01.06 11:51 
Ich bin gerade dabei, in eines meiner Programme einen mp3-Player mit Hilfe der bass.dll einzubauen. Das klappt soweit auch hervorragend (hätte ich gewusst, dass das so einfach ist, hätte ich das schon viel früher gemacht). Ein Problem habe ich aber noch. Wenn ich auf meiner Multimediatastatur (von Logitech) die Taste "Play" drücke, passiert nix. Und "Next" hat auch keine Wirkung. Warum klappt das nicht? :lol:

Nein, im Ernst. Bei mir haben diese Tasten zur Zeit folgende Funktion: Wenn ich Play drücke, startet Winamp, sofern kein anderer Mediaplayer geöffnet ist. Mit Next/Prev etc. kann ich dann Winamp steuern. Ist ein anderer Player geöffnet (z.B. der WindowsMediaPlayer) wird dieser gesteuert. Ich möchte nun, dass diese Tasten mein Programm steuern, wenn es geöffnet ist.

Die Frage ist nun: Wie funktioniert das? Das OnKeyPress/OnKeyDown wird nicht ausgelöst (oder kommt zumindest nicht auf meiner Form an). Damit die Tasten funktionieren, muss im Hintergrund "iTouch" laufen. Auf der Homepage gibt es eine Liste der unterstützten Player, allerdings habe ich hier einen, der nicht auf der Liste steht, aber trotzdem funktioniert. Auch dann, wenn das Fenster selbst nicht den Focus hat.
Also muss es da einen Trick geben. Weiss einer, wie diese Tasten behandelt werden? Also entweder von Windows direkt oder durch den speziellen Logitech-Treiber? Wie wird festgestellt, an welches Programm das Kommando "Nächster Titel" gesendet wird, und wie sieht dieses Kommando genau aus? Und wie ist das mit anderen Modellen/Herstellern solcher Tastaturen?

Hat einer ne Idee?

_________________
We are, we were and will not be.
Terra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 307

Windows 7 Ultimate
Delphi® XE3
BeitragVerfasst: Di 10.01.06 12:35 
Also bei meinem Tastaturtreiber kann ich komplett alles selber einstellen. Soll heißen, das man dort auch einstellen kann, welche Taste - welche Aktion ausführen soll. Sollte das bei dir nicht der Fall sein, siehts meißt schlecht aus, da die Informationen, was beim Anschlag der Funktionstaste im Bios der Tastatur abgespeichert sind und dadurch auch nicht verändert werden können.

Kann sein das ich mich irre aber meines Wissens ist das so, wie ich es geschrieben habe.

Vielleicht ist es, je nach Tastaturtyp auch möglich ein eigenen Tastaturtreiber zu entwickeln. Möglich wäre evtl. auch noch den Tastaturhersteller selbst nach den erforderlichen Daten zu befragen. Ob sie die dir auch geben hängt vom Hersteller ab.

Terra
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Di 10.01.06 14:07 
Schau mal folgendes Sample auf CodeGuru. Gefunden über Google. ;-) Kenne mich damit zwar nicht wirklich gut aus aber vom Code her siehts ganz brauchbar aus.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Di 10.01.06 14:16 
Oder schau mal hier: www.delphi-forum.de/viewtopic.php?t=42304 ich hatte sowas auch schon mal gefragt. Die Komponente, auf die verwiesen wird, funktioniert Einwandfrei, solange deine Anwendung den Fokus hat. Soll deine Anwendendung immer drauf reagieren benötigst du ja einen Hook und den müsstest du dir ja wahrscheinlich selber schreiben (ausgehen von CodeGuru oder der Source von der Komponente)

Gruß alias5000

_________________
Programmers never die, they just GOSUB without RETURN
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 10.01.06 17:32 
user profile iconLossy eX hat folgendes geschrieben:
Schau mal folgendes Sample auf CodeGuru. Gefunden über Google. ;-) Kenne mich damit zwar nicht wirklich gut aus aber vom Code her siehts ganz brauchbar aus.

Kenne mich damit auch nicht so gut aus, aber habs damit hingekriegt: So gehts:

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:
// Die Konstanten waren so nicht bekannt. Hab sie mir aber besorgt, nämlich so: (**)
const
   APPCOMMAND_MEDIA_NEXTTRACK      = 720896;
   APPCOMMAND_MEDIA_PREVIOUSTRACK  = 786432;
   APPCOMMAND_MEDIA_STOP           = 851968;
   APPCOMMAND_MEDIA_PLAY_PAUSE     = 917504;
//[...]
procedure MediaKey (Var aMSG: tMessage); message WM_APPCOMMAND;
//[...]
procedure TForm1.MediaKey (Var aMSG: tMessage);
begin
  //Showmessage(InttoStr(aMSG.LParam)); (**) 
  case aMSG.LParam of
    APPCOMMAND_MEDIA_NEXTTRACK     : begin
      PlayNextBTNClick(NIL); // Weiterleiten auf die Mediaplayer-Buttons
      aMsg.Result := 1;
    end;
    APPCOMMAND_MEDIA_PREVIOUSTRACK : begin
      PlayPrevBTNClick(NIL);
      aMsg.Result := 1;
    end;
    APPCOMMAND_MEDIA_STOP          : begin
      StopBTNClick(NIL);
      aMsg.Result := 1;
    end;
    APPCOMMAND_MEDIA_PLAY_PAUSE    : begin
      PlayBTNClick(NIL);
      aMsg.Result := 1;
    end;
  end;
end;

Erstaunlicherweise scheint das auch zu klappen, wenn mein Fenster nicht den Fokus hat. Obwohl ich das weitere (mit den Hooks) noch nicht gemacht habe. Es scheint so zu sein, dass dieses iTouch die Nachricht abfängt und an alle Fenster weiterleitet in der Hoffnung, dass eines damit was anfangen kann...

_________________
We are, we were and will not be.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mi 11.01.06 12:34 
Schau dir mal die Messages als Hexwerte an. Das sieht wesentlich angenehmer aus. ;-)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
   APPCOMMAND_MEDIA_NEXTTRACK      = $B0000// 720896;
   APPCOMMAND_MEDIA_PREVIOUSTRACK  = $C0000// 786432;
   APPCOMMAND_MEDIA_STOP           = $D0000// 851968;
   APPCOMMAND_MEDIA_PLAY_PAUSE     = $E0000// 917504;

Deckte sich auch mit dem was google rausgeworfen hat.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 11.01.06 16:41 
Naja, als er bei mir gemeckert hat, dass APPCOMMAND_MEDIA_NEXTTRACK unbekannt sei, hab ich mir halt über Showmessage die Konstanten ausgeben lassen. Gegoogelt hab ich danach nicht.
Etwas verwundert war ich schon über die "komischen Werte"; dass das in der Hex-Darstellung so glatte Werte sind, ist tatsächlich etwas angenehmer. Werde wohl meinen Code entsprechend anpassen. Danke nochmal!

Jetzt hab ich nur noch so ein paar Probleme mit Drag&Drop, ein paar weitere Anzeigen, die auch ins Design passen müssen (Aussehen/Platz), ein paar Funktionen wie Device-Auswahl, WMA-Unterstützung, evtl. Bufferung der Audiodaten, evtl. Fade-In/-Out bei Titelwechsel, Speichern/Laden der Playlist und ein aufpolieren einiger Verhaltensweisen des Players, die noch störend sind, und schon ist das Ding reif für die Veröffentlichung :lol:.

(Das hier hatte keine hohe Priorität. Ist aber schön, dass das so schnell und einfach gelöst werden konnte!)

_________________
We are, we were and will not be.
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Mi 11.01.06 17:48 
Wie spielst du die Dateien ab, mit dem TMediaPlayer, bass, fmod?

Gruß alias5000

_________________
Programmers never die, they just GOSUB without RETURN
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 11.01.06 17:55 
wenn er bass sagt, dann wird er wohl nicht gelogen haben
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Mi 11.01.06 18:01 
hm, ok, das muss ich wohl übersehen haben :wink:

_________________
Programmers never die, they just GOSUB without RETURN
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 11.01.06 18:09 
Womit ich das abspiele, ist hier ja eigentlich egal, oder? Für andere Probleme (Visualisation, spulen im Stück, Lautstärke, faden) schon eher, aber damit komme ich bisher ganz gut klar - die Beispiele und Hilfe bei der bass.dll sind ja recht ausführlich.

Oder gibt es spezielle Gründe, weswegen man nicht bass, sondern TMediaplayer oder fmod nehmen sollte?

_________________
We are, we were and will not be.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mi 11.01.06 19:07 
user profile iconGausi hat folgendes geschrieben:
Oder gibt es spezielle Gründe, weswegen man nicht bass, sondern TMediaplayer oder fmod nehmen sollte?
Ist hauptsächlich Geschmackssache. Mit dem Mediaplayer lässt es sich einfach arbeiten, da ein ActiveX-Control. Man muss nichts mitliefern, ist dafür aber auf die ACM-Codecs beschränkt. Bass ist vergleichweise klein, FMOD vergleichsweise professionell und portabel. Für FMOD 3.x gab es mal eine Vergleichstabelle auf der FMOD-Seite, mittlerweile scheint die verschwunden zu sein, aber FMOD war ein ziemlich schneller Decoder. Ich nehme an, daß sich das bei FMODex nicht geändert hat.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Mi 11.01.06 19:50 
Nein, es hatte mich bloß interessiert, weil du diese Zusatzfeatures wie fade in/out und so erwähnt hast und da hatte ich mir bloß ein wenig Gedanken über die Lösung dazu gemacht. Ich selber programmiere z.Z. auch ein wenig mit bass (wenn auch nur ab und zu).

Gruß alias5000

_________________
Programmers never die, they just GOSUB without RETURN
momo48xs
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 01.02.08 21:58 
Hallo,

wenn ich den hier geposteten Programmcode für mein Programm verwende, erscheint folgender Fehler:

Bei
procedure MediaKey (Var aMSG: tMessage); message WM_APPCOMMAND;
kommt "Undefinierter Bezeichner 'WM_APPCOMMAND'".

Welche Bibliothek muss ich da noch einbinden?
Oder was ist da los?

Meine uses sieht so aus:

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs ;
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 01.02.08 22:15 
Hallo und :welcome:

Die sollte eigentlich bei Messages definiert sein :gruebel:. Welche Delphi-Version nutzt du denn? Ansonsten sollte es klappen, wenn man die so definiert (aus den Turbo-Delphi-Sourcen):

ausblenden Delphi-Quelltext
1:
WM_APPCOMMAND       = $0319;					


Edit: Der erste, der mir jetzt nach zwei Jahren erklären will, wie das mit diesen Tasten geht, oder warum man doch lieber fmod für nen Player nehmen sollte, bekommt eine gewatscht, dass es knallt. :mrgreen:

_________________
We are, we were and will not be.
momo48xs
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Sa 02.02.08 12:51 
Das merkwürdige daran ist ja, dass es schon mal funktioniert hat.

Danach wurde mein Projekt durch irgendeinen Datenverlust beschädigt.
So konnte ich es mit Delphi 7 ( benutze ich standardmäßig) nicht mehr Öffnen (' Corrupt Portfolio stream')

Mit Delphi 6 öffnen geht jedoch problemlos

Da ich aber feststellen musste, dass viele Buttons etc. schlichtweg einfach nicht mehr da waren auf dem form, jedoch in der Unit weiter dekalriert waren , dachte ich, dass vielleicht in der Unit irgendetwas verloren gegangen ist, wodurch WM_APPCOMMAND nicht mehr funktioniert.

Daran kann es aber auch nicht liegen.
Ich habe zu Testzwecken ein neues kleines Programm geschrieben, bei dem der selbe Fehler auftritt.

Der Tipp scheint jedenfalls zu funktionieren.

Der Compiler beschwert sich jetzt logischerweise nicht mehr.
Ob jetzt nun tatsächlich auf WM_APPCOMMAND reagiert wird, kann ich noch nicht sagen, da ich durch den Datenverlust erstmal noch einige Objekte wiederherstellen muss.

Vielen Dank erstmal.


Edit: Tipp funktioniert einwandfrei. Danke