Notice: This forum has been recovered from an old backup, so some content, links, and dates may be outdated. The forum is currently read-only while we restore sign-in and registration functionality. Details

If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.

foobar plugin

Allgemeines zum Thema EventGhost
MonsterMagnet
Plugin Developer
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

foobar plugin

Post by MonsterMagnet »

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.
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Re: foobar plugin

Post by Bitmonster »

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

Post by Bitmonster »

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.
MonsterMagnet
Plugin Developer
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Post by MonsterMagnet »

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

Post by MonsterMagnet »

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

Post by MonsterMagnet »

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.
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

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?
MonsterMagnet
Plugin Developer
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Post by MonsterMagnet »

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.
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

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.
MonsterMagnet
Plugin Developer
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Post by MonsterMagnet »

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...
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

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.
MonsterMagnet
Plugin Developer
Posts: 137
Joined: Fri Feb 10, 2006 12:04 pm

Post by MonsterMagnet »

: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

Post by MonsterMagnet »

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 !
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

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

Post by Bitmonster »

Peinlich. Jetzt sollte es wieder gehen. Habe das Posting oben editiert.
Post Reply