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
Hybrid666. 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:
- Alle gefundenen Geräte heißen (oft?) "Microsoft PC-Joysticktreiber" auf Grund eines Bugs in Windows. Hierzu gibt es Tricks zum Umgehen, wir arbeiten daran.
Geplant (unter anderem ;) ):
- Setup Dialog für einige Funktionen, u.a. Verhalten beim Minimieren, Minimierter Start, bestimmte Threshold Einstellungen... Erledigt
- Evtl Startparameter, u.a. zum minimierten Starten Erledigt (Ist nun eine Einstellung im Setup Dialog)
- Plugin zum Keyboard-Events feuern, so könnte man theoretisch sogar einfachere Spiele per Gamepad steuern :) Erledigt
- Lautstärke von Windows - Yay für die Änderung, die Vista in diesem Bereich gebracht hat :| Erledigt
- Vorschläge von DF-Usern umsetzen :zustimm:
- Seh ma dann :D
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
Narses: 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
JayEff oder
Hybrid666 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 > 0) then 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 > 0) then SendMessage(getwinamphwnd,WM_COMMAND,40148,0); end; if pos < 0 then begin if (getwinamphwnd > 0) then 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.