foobar plugin

Allgemeines zum Thema EventGhost

foobar plugin

Postby MonsterMagnet » Mon Feb 13, 2006 4:58 pm

Hallo,

hab mal ein Foobar Plugin gemacht.

Leider ist es nur schwer möglich sendmessage zu verwenden, da sich die Fensternamen von Version zu Version ändern.

So funktionierts mit 0.8 und 0.9 und wahrscheinlich auch mit allen anderen.

Mit der Fehlerbehandlung bin ich noch nicht ganz zufrieden.

Wer sonst noch was zu bemängeln hat oder Verbessungsvorschläge machen kann...

EDIT: Verbesserter Code weiter unten...

Wie hast Du Dir eigentlich die Plugin Installation vorgestellt?

Per Installer oder soll der User selber einen Ordner anlegen und
die Plugin Dateien einfügen ?

Ich würde ja die Installer Methode bevorzugen.

Wie und wo könnte man die Plugins dann hochladen ?
Last edited by MonsterMagnet on Tue Feb 14, 2006 5:35 pm, edited 1 time in total.
MonsterMagnet
Plugin Developer
 
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Re: foobar plugin

Postby Bitmonster » Mon Feb 13, 2006 5:10 pm

MonsterMagnet wrote:Wie hast Du Dir eigentlich die Plugin Installation vorgestellt?

Per Installer oder soll der User selber einen Ordner anlegen und
die Plugin Dateien einfügen ?

Ich würde ja die Installer Methode bevorzugen.

Wie und wo könnte man die Plugins dann hochladen ?

Gute Frage, die sich jetzt zum ersten mal stellt. Denn das ist das erste Plugin, eines anderen Autors. :)

Ein Installer? Wäre vielleicht nicht schlecht. Allerdings fällt mir gerade keiner ein, den man mal eben soweit vorkonfigurieren kann und der Programmierer dann einfach die Dateien anhängen kann.

Es gibt auch noch die Möglichkeit den Ordner des Plugins zu einer Datei zusammenzufassen. Ist dann wie eine DLL die der User in den Plugin-Ordner schiebt. Ich hatte das aber erstmal wieder abgeschaltet, weil es ohne das einfacher war, da jetzt mit dem Installer dann auch gleich der vollständige Source-Code kommt.

Andere Projekte machen es so, dass die SAchen einfach zu einem Zip-File zusammengefasst werden und der User es dann aus dem Programm heraus öffnet. Die Routine entpackt dann einfach alles an die richtigen Stellen und fertig ist die Installation.

Noch geiler wäre ja so eine Art Online-Liste, die der User dann anschauen kann und mit einem Klick dann Runterladen und Installation erledigt wird.
User avatar
Bitmonster
Site Admin
 
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Postby Bitmonster » Mon Feb 13, 2006 5:18 pm

Gerade eben auf doof gefunden:
http://yallara.cs.rmit.edu.au/~dhotson/upload/foobar.py

Es soll wohl ein Plugin für foobar geben, dass dann auf SendMessage reagiert. Ist aber auch blöde, dass der User dann erst in foobar ein Plugin installieren muss. Das die Entwickler auch nie an eine schöne Automatisierungs-Schnittstelle denken.
User avatar
Bitmonster
Site Admin
 
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Postby MonsterMagnet » Mon Feb 13, 2006 5:25 pm

Ja, da gibts ne Menge Möglichkeiten.

Wie wärs wenn Du einen Eintrag in die ach so beliebte Registry machst.
Dann würds genügen ein InnoSetup (oder ähnliches) Skript zur Verfügung zustellen, in dem man nur noch die Dateien und Pfadangaben ändern muß.
MonsterMagnet
Plugin Developer
 
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Postby MonsterMagnet » Mon Feb 13, 2006 5:32 pm

Zum Sendmessage, hab echt alles probiert aber beim ersten Start von Foobar ist nur das Message only Fenster zufinden.

Man könnte zwar mit EnumWindows das ganze nach nem string "foobar" durchsuchen, finde ich aber auch nicht grade elegant.

hFoobar = win32gui.FindWindow("{DA7CD0DE-1602-45e6-89A1-C2CA151E008E}",None)

Der Entwickler hat das mit Absicht sogemacht...
MonsterMagnet
Plugin Developer
 
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Postby MonsterMagnet » Mon Feb 13, 2006 5:55 pm

Hab mir grad den Link angesehen,

Tested with FooBar2000 v.7 beta 37 on Windows 2000 SP2

damals ging das noch...

Die Fensternamen ändern sich aber auch sobald man einen anderen GUI style verwendet, was bei der 0.9beta von Haus aus der Fall ist.
MonsterMagnet
Plugin Developer
 
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Postby Bitmonster » Mon Feb 13, 2006 6:01 pm

Und die Fenster-Klasse?

Registry-Eintrag werde ich mal einbauen, obwohl EG ihn bisher nicht braucht. Wobei da auch schon wieder das Problem mit Mehrfach-Installationen ist. Kriegt man den Installer so konfiguriert, dass er dem User eine Liste möglicher Ziele geben kann?
User avatar
Bitmonster
Site Admin
 
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Postby MonsterMagnet » Mon Feb 13, 2006 6:25 pm

Also an foobar haben sich schon andere Leute die Zäne ausgebissen.
Alle Fernsteuerungsversuche die ich kenne(ohne Plugins), scheitern
an dem Message only Fenster sogar die im Programm integrierte Funktion um
die Tasten eines Multimediakeyboards zu benutzen.

Das mit dem Sendmessage funktioniert bei allen mir bekannten Anwendungen(z.B: Firefox Extension) nur mit einer bestimmten Version
und dann auch nur wenn das Programm einmal den Focus gehabt hat.

Zum Installer, hab bisher nur Inno benutzt (ausschließlich Eigengebrauch!)
und fand das so einfach wie ein Zip file zuerstellen.

Da kann man eigentlich alles mit machen.
MonsterMagnet
Plugin Developer
 
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Postby Bitmonster » Mon Feb 13, 2006 6:40 pm

Ist ja dämlich von den Entwicklern, so einen Popanz zu machen. Könnte man das Plugin noch erweitern, damit es bei Vorhandensein des remote_plugins die zusätzlichen Funktionen verwendet?

Inno benutze ich ja auch. Aber auch nur, weil das erste Installation-Skript für ein Python-Programm, das mir über den Weg lief ausgerechnet für Inno war. Ich denke wir machen das mal zuerst so. Ich lege einen Registry-Eintrag an und schau mal, wie man das mit Inno am bequemsten löst. Und irgendwann werde ich mal versuchen eine Download&Install-Funktion in EG zu integrieren.

Wie sieht es bei dir mit Webspace aus? Sonst muss ich mal zusehen, dass ich dir einen FTP-Zugang oder sowas besorge.
User avatar
Bitmonster
Site Admin
 
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Postby MonsterMagnet » Mon Feb 13, 2006 7:13 pm

Hab ich auch schon drüber nachgedacht, erstmal findwindow dann Plugin, dann commandline.

Falls es EG User gibt die so eine Lösung bevorzugen kann man sich ja mal Gedanken machen.

Ich finds fürs erste mal besser ein Plugin zu haben was mit jeder Version funktioniert.

Man könnte ja auch verschiedene Versionen machen.

Mit dem Webspace siehts schlecht aus...
MonsterMagnet
Plugin Developer
 
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Postby Bitmonster » Mon Feb 13, 2006 7:24 pm

Na ja, der User merkt ja fast nix davon, wenns sauber gemacht ist. Muss man ihm halt in den Help-Strings aufzeigen, dass er unter Umständen das remote-plugin installieren muss.

Also würde ich da gleich alles reinbauen, was geht. Ich kann dir dann auch noch nen Config-Dialog für das Plugin machen, wo der User dann die beforzugte Zugriffsart auswählen kann oder sowas.

Hab mal etwas an deinem Plugin rumgepfuscht. So sieht es vielleicht noch etwas schöner aus. Du hast ja anscheinend das Winamp-Plugin als Vorlage genutzt und das war so ziemlich das erste EG-Plugin, dass ich je geschrieben habe. Bin aber trotzdem begeistert, wie schnell du dir die Möglichkeiten von Python zu eigen gemacht hast.
Code: Select all





















import win32api
import _winreg
import eg

fnList = (
('Play', 'Simulate a press on the play button', "/play"),
('Pause', 'Simulate a press on the pause button', "/pause"),
('Stop', 'Simulate a press on the stop button', "/stop"),
('PreviousTrack', 'Simulate a press on the previous track button', "/prev"),
('NextTrack', 'Simulate a press on the next track button', "/next"),
('Random', 'Simulate a press on the random button', "/rand"),
('Exit', 'Quits foobar', "/exit"),
('PlayPause', 'Simulate a press on the PlayPause button', "/playpause"),
('Show', 'Shows foobar', "/show"),
('Hide', 'Hides foobar', "/hide"),
('Run', 'Run foobar with its default settings', None),
)


class Foobar2000(eg.PluginClass):
    name = 'Foobar2000'
    description = "Adds support functions to control Foobar2000"
   
    def __init__(self):
        path = None
        try:
            fb = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,"Software\\foobar2000")
            path,k =_winreg.QueryValueEx(fb,"InstallDir")
            _winreg.CloseKey(fb)
        except:
            eg.PrintError("Foobar2000 installdir not found!")
       
        group = self.AddGroup(self.name)
       
        for tmp_name, tmp_description, tmp_value in fnList:
            class tmp_action(eg.ActionClass):
                name = tmp_name
                description = tmp_description
                value = tmp_value
               
                def __call__(self):
                    try:
                        return win32api.ShellExecute(0, None,
                                    "foobar2000.exe", self.value, path, 0)
                    except:
                        eg.PrintError("Foobar2000 installdir not found!")
           
            tmp_action.__name__ = tmp_name
            group.AddAction(tmp_action)

Last edited by Bitmonster on Mon Feb 13, 2006 8:14 pm, edited 2 times in total.
User avatar
Bitmonster
Site Admin
 
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Postby MonsterMagnet » Mon Feb 13, 2006 7:42 pm

:D

Na das sieht schon besser aus...

Mal schauen ob ich noch ein interessantes Programm find, was sich leichter
steuern lässt.

Auf das Foobar Plug komme ich dann später noch mal zurück.

Danke für die ganzen Beispiele, so lernt man's doch am schnellsten...
MonsterMagnet
Plugin Developer
 
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Postby MonsterMagnet » Mon Feb 13, 2006 8:05 pm

Hat sich da irgendwo ein Fehler eingeschlichen ?

Bei mir startet immer nur die exe. (foobar 0.9beta)

Naja morgen ist auch noch ein Tag...

Gute Nacht !
MonsterMagnet
Plugin Developer
 
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Postby Bitmonster » Mon Feb 13, 2006 8:07 pm

Ich sollte wohl mal erst foobar installieren, bevor ich an dem Plugin rumpfusche. :)
User avatar
Bitmonster
Site Admin
 
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Postby Bitmonster » Mon Feb 13, 2006 8:14 pm

Peinlich. Jetzt sollte es wieder gehen. Habe das Posting oben editiert.
User avatar
Bitmonster
Site Admin
 
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Next

Return to Hilfe und Support

Who is online

Users browsing this forum: Bing [Bot] and 0 guests