Entwickler-Ecke

Open Source Projekte - JoyToAny 0.6


JayEff - Do 15.01.09 18:15
Titel: JoyToAny 0.6
Hallo Leute! :D

JoyToAny ist keine beta mehr :party:

JoyToAny ist eine Weiterentwicklung vom eingestellten JoyMedia (Der Name war auch bereits geschützt :oops: ) von user profile iconHybrid666. Mit ihm lassen sich Joystick- und Gamepadbuttons und -Achsen über ein Pluginsystem mit beliebigen Funktionen hinterlegen.

Für das Pluginsystem findet sich im hierauf Folgenden Post ein kleines Tutorial von Hybrid666 mit angehängtem Beispielcode: Das komplette Winamp-Plugin!

Die Plugins sitzen als .dll Datei im Plugins Ordner.
Die aktuell verfügbaren Plugins finden sich mit Beschreibung hier [http://jayyeff.kilu.de/joytoany/index.php?site=plugins].
Eine verkürzte Liste:
Home:


  • Winamp.dll - Steuerung von Winamp, wie z.B. Nächstes Lied, voriges Lied, Lautstärke, Scrollen, uvm
  • iTunes.dll - Steuerung von iTunes
  • nemp.dll - Steuerung des hervorragenden MP3 Player von Gausi
  • playsound.dll - Eine kleine Spielerei, welche es erlaubt, bei Tastendruck eine Sounddatei abzuspielen.
  • wincontrol.dll - Steuerung von diversen Windowsfunktionen (Momentan nur Lautstärkeregelung)
  • mouse.dll - Steuerung der Maus
  • keyboard.dll - Belegung der Joysticktasten mit Keyboard Makros



KnownBugs:


Geplant (unter anderem ;) ):


Change Log:
Ein detailiertes Changelog findet sich ein paar Beiträge weiter unten [http://www.delphi-forum.de/viewtopic.php?p=545235#545235], sowie auf unserer Homepage.

Das Programm erstellt einen Ordner in AppData, keine Installation. Hier ist ein direkter Download: *klick* [http://jayyeff.kilu.de/joytoany/downloads/jta06.rar]

Der Source des inzwischen auf SourceForge zu finden, und zwar hier: http://joytoany.sf.net/

Unsere Homepage findet sich hier: http://www.JoyToAny.tk/

Mfg
Jan & Markus :zustimm:


Moderiert von user profile iconNarses: Topic aus Freeware Projekte verschoben am Di 03.02.2009 um 13:55


Hybrid666 - Do 15.01.09 18:17
Titel: Tutorial
TUTORIAL ZUM ERSTELLEN EIGENER JoyToAny PLUGINS

Ich versuch euch in diesem kleinen tutorial näher zu bringen, wie ihr eigene Plugins für unser programm JoyToAny erstellen könnt. Als Anhang werd ich euch den Source zur winamp.dll geben und ich werd mich in dem Tutorial als beispiele auch auf selbigen Code als Beispiel beziehen. Falls am Ende des Tutorials irgendwelche Fragen auftreten, schreibt user profile iconJayEff oder user profile iconHybrid666 an, wir werden, sofern möglich, alle Fragen diesbezüglich beantworten.

Also fangen wir an.

Zuerst erstellt ihr in Delphi über File -> New -> Other den DLL Wizard, damit ihr das Grundgerüst für eine DLL Datei erhaltet.

Nun müssen ersteinmal ein paar Info Funktionen erstellt werden, die JoyToAny zwingend benötigt, um alle Funktionen für die Tasten, Achsen und das POV richtig anzeigt.

In der Winamp.dll sieht das folgendermaßen aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function getbuttonfunc():PChar;
begin
  result := PChar('Play|Pause|Stop|Start|Close|ToggleShuffle|ToggleRepeat|NextTrack|PreviousTrack|Volume');
end;

function getaxisfunc():PChar;
begin
  result := PChar('Seek|AxesVolume|SliderVolume');
end;

function getpovfunc():PChar;
begin
  result := PChar('');
end;


Wie ihr seht, geben diese Funktionen durch Pipes getrennte Commands zurück. Diese Commands müssen dann in der DLL erstellt werden. Wichtig ist, das die Funktionen alle klein geschrieben werden (da ein Funktionsaufruf Case Sensitiv ist).

Nun erstellen wir unsere erste Funktion, und zwar für einen Button, diese hat als Header das Format:


Delphi-Quelltext
1:
procedure play(state : integer; param:PChar);export;                    


dieses Format sollte auch beibehalten werden. Auch hier ist wichtig, das der Funktionsname kleingeschrieben ist.

Nun schreibt, was die Prozedur ausführen soll. Die Play Prozedur sieht bei der Winamp.dll folgendermaßen aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure play(state : integer; param:PChar);export;
begin
  if state = 0 then
  begin
    if (getwinamphwnd > 0then SendMessage(getwinamphwnd,WM_COMMAND,40045,0);
  end;
end;


Hier sind nun 2 Parameter der Prozedur angegeben.

state enthällt den Buttonstatus, dabei steht:
0 für wurde gedrückt
1 für wurde gehalten
2 für wurde released

Gehalten und released könnt ihr Handhaben wie ihr das braucht. Der status 1 wird z.B. von der Prozedur NextTrack verwendet, seht dazu mehr im Code.

Nun schreiben wir eine Achsenfunktion.
Die sieht so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure seek(pos,max:integer; Changed : Boolean; param:PChar);export;
begin
  if pos > 0 then
  begin
    if (getwinamphwnd > 0then SendMessage(getwinamphwnd,WM_COMMAND,40148,0);
  end;
  if pos < 0 then
  begin
    if (getwinamphwnd > 0then SendMessage(getwinamphwnd,WM_COMMAND,40144,0);
  end;
end;


Hier haben wir die Parameter pos, max, changed und param.
Pos gibt die aktuelle position wieder, welche von -max bis +max gehen kann (0 ist also die Nullstellung der Achse).
Changed ist true oder false, je nachdem, ob es seit dem letzten aufruf geändert wurde, oder nicht (Dies ist wichtig bei z.B. Slidern, welche auch als Achse erkannt werden, seht dazu im Code SliderVolume).

Nun Noch die POV Prozeduren, welche so aussehen (leider existiert keine Beispielfunktion momentan dafür):

Delphi-Quelltext
1:
procedure mypovproc(Up, Down, Left, Right: Boolean; Param: PChar);                    

Die Parameter stehen dabei für die richtungen, die gedrückt sind.

Nun werden die ganzen funktionen noch in export gepackt:


Delphi-Quelltext
1:
2:
3:
4:
exports
  play,pause,stop,start,close,toggleshuffle,togglerepeat,nexttrack,
  previoustrack,slidervolume,volume,seek,axesvolume,getbuttonfunc,getaxisfunc,getpovfunc,
  info;


Nun gibt es noch eine optionale funktion. Im JoyToAny Programm habt ihr sicher den Button zum anzeigen der Function Info gesehen. Das wird folgendermaßen in der dll definiert:


Delphi-Quelltext
1:
procedure info(funct:PChar);                    


In der Winamp DLL hab ich das mal so gehandhabt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure info(funct:PChar);
begin
  if (funct = 'play'then ShowMessage('Sends play Command to Winamp' +#13+#10'Parameters:' +#13+#10'(none)');
  if (funct = 'pause'then ShowMessage('Pauses current track in Winamp' +#13+#10'Parameters:' +#13+#10'(none)');
  if (funct = 'stop'then ShowMessage('Stops current track in Winamp' +#13+#10'Parameters:' +#13+#10'(none)');
  if (funct = 'start'then ShowMessage('Runs Winamp' +#13+#10'Parameters:' +#13+#10'(none)');
  if (funct = 'close'then ShowMessage('Closes Winamp' +#13+#10'Parameters:' +#13+#10'(none)');
  if (funct = 'toggleshuffle'then ShowMessage('Toggles shuffle state in Winamp' +#13+#10'Parameters:' +#13+#10'(none)');
  if (funct = 'toggerepeat'then ShowMessage('Toggles repeat state in Winamp' +#13+#10'Parameters:' +#13+#10'(none)');
  if (funct = 'nexttrack'then ShowMessage('Plays next track of Winamp playlist' +#13+#10'Parameters:' +#13+#10'-repeat (on/off) (default = off) (if button is hold, repeat track skipping)');
  if (funct = 'previoustrack'then ShowMessage('Plays previous track of Winamp playlist' +#13+#10'Parameters:' +#13+#10'-repeat (on/off) (default = off) (if button is hold, repeat track skipping)');
  if (funct = 'slidervolume'then ShowMessage('Change Volume via Slider (use with sliders only! Normal Axes will mess this up!' +#13+#10'Parameters:' +#13+#10'(none)');
  if (funct = 'volume'then ShowMessage('Change Volume via Button' +#13+#10'Parameters:' +#13+#10'-up NUM (increases Volume)' +#13+#10'-down NUM (decreases Volume)' +#13+#10'-repeat (on/off) (If button is hold, repeat volume inc/drecrease) (default = off)');
  if (funct = 'seek'then ShowMessage('Seek track by fast forwarding/backwarding' +#13+#10'Parameters:' +#13+#10'(none)');
  if (funct = 'axesvolume'then ShowMessage('Increase/Decrease volume by Axes' +#13+#10'Parameters:' +#13+#10'-value NUM (default = 5)');
end;


Ein MessageDLG wäre natürlich schöner, aber das sollte so auch reichen ;) Ihr könnt das handhaben wie ihr denkt. Vergesst aber nicht für die dialoge die richtigen uses reinzumachen, da der Compiler sonst meckern wird *prophezei*

Dann kompiliert ihr die DLL, kopiert sie in das Plugin verzeichniss, und schon ist das plugin ready to use ;)

Es grüßen euch JayEff und Hybrid666, in der hoffnung das viele wundervolle plugins entstehen werden, wenn es gut ist, werden wir, sofern erlaubt, es in den nächsten release von JoyToAny (welcher noch viele Verbesserungen mitbringen wird) reinpacken (natürlich mit Hinweiß auf den urheber! Muhaha)

Zögert nicht, Fragen, Anregungen, Beschimpfungen und sonstiges Hirngewäsch an uns zu schicken.


Hybrid666 - So 18.01.09 19:02

Wie ihr seht ist heute eine neue Version online gekommen, JoyToAny nähert sich dem ersten Release Candidate!

Changelog 0.2 Beta:


Übrigens: Falls ihr euch nicht zutraut ein Plugin zu machen (oder einfach keine lust habt), dann postet doch einfach mal eure ideen, wir sind immer froh wenn wir neue ideen haben die wir umsetzten können!


Hybrid666 - Mi 21.01.09 11:38

So, wir sind nun endlich zur ersten non-beta version vorangeschritten, die version 0.4. Es wurden sehr viele bugs gefixt, es warten einige neue features und es gibt nun eine eigene seite für joytoany, mit der möglichkeit direkt eigene plugins hochzuladen, bestehende plugins zu bewerten, usw.

Die Seite lautet:
http://www.joytoany.tk/

wer sich die seite sparen will und es direkt downloaden will:
http://jayyeff.kilu.de/joytoany/downloads/jta04.rar

Viel spaß, und über ein wenige feedback würden wir uns sehr freuen!

hier noch das aktuelle changelog:

Zitat:
0.1 beta
# Added: Joystickerkennung funktioniert, wenn auch verbuggt
# Added: Plugins nach Schema von JoyMedia mit leichen modifikationen
# Added: Funktionen können auf Buttons, Achsen und das POV gelegt werden

0.2 beta
# Added: Setup Dialog
# Added: Info Dialog
# Bugfix: Deadzones wurden teils falsch gelesen
# Bugfix: CPU Auslastung stark verringert
# Bugfix: RAM auslastung geht nun nichtmehr hoch, sondern bleibt konstant und niedrig
# Added: Für jede Achse kann im Setup angegeben werden, ob es sich um einen Slider oder eine Achse handelt
# Added: iTunes.dll Plugin
# Added: playsound.dll Plugin
# Changed: mouse.dll hat nun zusätzliche Parameter
# Added: Pollingzeit kann eingestellt werden
# Added: Favorisierter JoyStick wird gespeichert
# Added: Start Mode auswählbar
# Added: Start in Tray funktion

0.3 beta RC1
# Added: DeadZones im Setup Dialog separat einstellbar
# Added: getrecdeadzone kann jetzt in DLLs verwendet werden
# Added: Mehrere weitere Einstellungen im Setup

0.4
# Bugfix: TrayIcon Bug entfernt
# Added: Reload Plugin Button hinzugefügt (Programm muss beim einfügen nicht neu gestartet werden)
# Added: Sprachsupport
# Bugfix: Wenn kein Joystick angeschlossen ist wird kein POV mehr angezeigt und JoyToAny springt auf Inactive
# Bugfix: Letzten known Bugs entfern, sollte nun relativ gut laufen
# Bugfix: Deadzones Bug entfernt


JayEff - Mo 02.02.09 13:09

0.5 ist raus!

Profilsupport, das wichtigsten an diesem Update, bedeutet: Man kann nun Belegungen für die Tasten als Profil-Datei speichern und laden. Praktisch, wenn man neue funktionen testen will aber seine alte Belegung nicht verlieren möchte :zustimm:

Download im ersten Beitrag.


Hybrid666 - Di 03.02.09 13:56

news:
joytoany ist jetzt opensource ;)

schaut euch einfach joytoany.sf.net an :D

@mod: bitte in OpenSource moven ;)

MfG


Hybrid666 - So 15.02.09 18:16

version 0.6 iss raus:

Zitat:

0.6
- ADDED: Update Function
- ADDED: Language Info Button
- ADDED: API to Control JoyToAny from external Applications
- BUGFIX: Many minor bugs


Download auf http://www.joytoany.tk bzw hier der direktlink:

http://jayyeff.kilu.de/joytoany/downloads/jta06.rar

viel spaß!