Plugin mit Delphi ?!

Hier haben Plugin-Entwickler die Möglichkeit, sich auszutauschen.
Prinz
Junior Member
Beiträge: 11
Registriert: 25 Mai 2010, 09:18

Re: Plugin mit Delphi ?!

Beitrag von Prinz »

Hallo,
ScanMan hat geschrieben:Wenn es denn mit dem DVBViewer - und das ist auch eine Win-App - mit 'Unterhaltung' via COM (damit ist ja hoffentlich das Component Objet Model gemeint und nicht die serielle Schittstelle ???) funtkioniert, so ist das für mich dann auch nicht das Problem, das zumindestens 'zuzuhören'.

Wer hat das Plugin denn gebastelt ? Ist das so geheim, das es dazu keine Info's / Sourcen gibt ? Oder eine Eigenpoduktion aus dem Hause Hackbart ?
Richtig, unter COM habe ich das Component Objet Model gemeint. Gleichzeitig bekenne ich mich der Programmierung dieses Plugins schuldig ;-). Der Quellcode ist unter folgender URL zu finden:

http://www.dvbviewer.info/forum/index.p ... opic=40754

Dort sind die nativen Java-Aufrufe in der Klasse "dvbviewertimerimport/dvbviewer/DVBViewerCOM.java" realisiert. Der für die DLL notwendige C++-Code ist dann auch in der gepackten SourceCode-Datei zu finden.

Das etwas ältere andere Plugin für den DVBViewer, schickt dem Viewer eine Windows-Message, damit er die aktuelle Aufnahmeprogrammierung aus einer XML-Datei liest, welche das Plugin vorher geschrieben hat. Diese Methode hat jedoch den Nachteil, dass Sie beim Viewer nicht beim minimierten Fenster funkt und der DVBViewer nach der Message immer die Init-Dateien neu einliest, was zu rucklern führt. Beri Verwendung der COM-Schnittstelle werden diese Nachteile vermieden.

Der Code des älteren Plugins ist unter folgender URL zu finden.

https://tvbrowser.svn.sourceforge.net/s ... lugin-dvb/

Hier werden die dafür notwendigen nativen Methoden in der Klasse "dvbplugin.dvbviewer.ProcessHandler" definiert und der entsprechnde C++-Code befindet sich dort unter "/DVBPlugin/CProcessHandler"


Gruß
Prinz
ScanMan
Junior Member
Beiträge: 23
Registriert: 20 Feb 2010, 19:45

Re: Plugin mit Delphi ?!

Beitrag von ScanMan »

Aaaaah - geht doch irgendwie !
Wenn ich das nach erster, relativ oberflächlicher Durchsicht richtig verstanden habe, geht das in etwa so:

- via COM
Du hast eine DLL, welche du aus Java rufst und damit Kommunikation mit einem COM-Server machst.
Diese notwendige DLL ist ja nicht gerade ein 3-Zeiler und dann für die anzusprechenden Apps - hier DVBViewer - jedesmal speziell.
Dazu braucht's dann noch den COM-Server auf der App-Seite.
Sicherlich funktionell und sicher, aber für ein 'paar' kleine Kommandos/Parameter doch eben recht aufwendig.

- via Messages
... finde ich die gelungenere, weil einfachere und universellere Methode !

Wenn ich das richtig erkannt habe, benutzt Java da einen C_Source, mit dem sich Process-/Fensterhandles aus (Pfad +) Dateiname und Fenster-Titel ermitteln lassen, so daß man mit einer '(Post-)Sendmessage' zumindestens elementare Integer-Daten (keine Strings, Arrays, o.ä.) an eine Win-App schicken kann.
>>> So mache ich es auch immer.
Würde man da nocht ein wenig in Richtung WM_COPYDATA (siehe http://msdn.microsoft.com/en-us/library ... 85%29.aspx) erweitern, wäre auch die Lücke geschlossen.
Sofern man nun ggf. darauf verzichtet, seitens TV-Browser auf Rückmeldungen, Events, o. ä. zu reagieren (der OneWay zur App), kann mann sich dort die notwenigen Message-Handler für WinDoof sparen.
Allerdings ist das in C sicherlich auch nicht nennenswert schwieriger/komplizierter als in Delphi - oder ?

Vorteil dieser Art der Kommunikation wäre m.E., das man hier einmalig einen Code in Java / C schreibt und mit variablen Angaben für den Message-Typ und die Parameter dann in 'Abstimmung' mit dem zu kommunizierenden Programm sehr flexibel auslegen kann.
Wenn man WinDoof richtig 'fragt', bekommt man auch die Auskunft, ob ein Process überhaupt ein Fenster hat, dieses 'visible' ist, im Tray oder in der Taskbar liegt. D.h., an das Fensterhandle komme ich immer ran.

Ich habe bereits vor einiger Zeit erfolgreich für DVBDream ein Modul (das ist eine spezielle DLL - es gibt auch Plugins, aber das ist was anderes) geschrieben, mit dem ich mit einem x-beliebigen Programm in Kontakt treten kann, Daten kommunizieren und sich die beiden Programme (nahezu) beliebig fernsteuern lassen. Auch gegenseitiges starten und beenden.
Aus DVBDream heraus kann ich alles lesen und darin steuern, was die API des Proggies hergibt.
Alles nur per Post-/Sendmessage und WM_CopyData.

Meine kleine DVBDream-Erweiterung für ds10's 'WinTVCapGUI' ist übrigens ein Derivat davon - René ruft einfach die Datei DVBDreamStart2.EXE und übergibt je nach Bedarf div. definierte Paramter und ich schicke die nach einer Syntaxprüfung einfach weiter...
Die Lösung funktioniert, allerdings ist das auch hier der 'OneWay' vom TV-Browser zur App, da keine 'Rückmeldungen' gesendet, bzw./ empfangen werden können.

Fazit:

Auf meiner Seite (hier also DVBDream als DVB-App) könnte ich sagen: ' ... habe (fast) fertig !'
Seitens TV-Browser müsste man (nur ?) noch die Erkennung der DD-Moduls (richtig) implementieren und 'Konversations-Definitionen' zu Message-ID's und Parameter-Typen vereinbaren.
Genial wäre dann logo noch die Möglichkeit, das Stati aus der DVB-App. abgefragt werden oder gar als 'Event' verarbeitet werden können, wie z. B.:
- Wie ? Umschalten ? Aufnahme läuft auf aktuellem Programm ! Soll ich die die abwürgen ?
- Du willst meine aktuelle Programm-Liste mit ID's ? Bitte sehr ...
- Was guckt der User gerade aktuell - gibt mal die Programm-ID. Hier, bitte ... (z. B. zum einstellen des aktuellen Programms im TV-Browser)
- ... und etliches mehr.

Bekommen wir das was hin ?
Wenn 'Absichtserklärungen' von mindestens einer Java-Seite kommen, mache ich mich mal daran, ein TV-Browser für DVBDream zu schreiben und definiere einfach mal was / die Schnittstellen vor, was dieses Modul dann so alle 'könnte'. Ob das TV-Browser-Plugin dann auch alles (sofort) bedient, ist dann eine andere (Zeit-) Frage ....

..... ach ja:
Zu meinem Fernbedienungs-Tool hat sich immer noch keine(r) geräuspert.
Kein Interesse ? Gibt's schon ? Muss / soll ich das mal hier wo anders posten ?
Da ich das für DVBDream bereits 'am Start habe', wäre es ein leichtes von dort den TV-Browser zu steuern.
Via Tastensimulation geht das ja schon - via Plugin ist das sicherlich eleganter und komfortabler !?
ScanMan
Junior Member
Beiträge: 23
Registriert: 20 Feb 2010, 19:45

Re: Plugin mit Delphi ?!

Beitrag von ScanMan »

... Haloo Insider / Progger !
Keine Ideen, Vorschläge, Lösungen ?
Antworten