Jump to content

alternatives X10-Inputplugin


Recommended Posts

ExTen.zip

 

EDIT: 26.05.10

Beschreibung für die aktuelle Version hier:

http://www.DVBViewer.info/forum/index.php?...st&p=299342

 

 

 

Für alle von Euch mit einer X10-Fernbedienung denen die möglichen Codes über das X10 Inputplugin von Lars nicht ausreichen hier ein kleines Weihnachtsgeschenk.

 

ExTen'ded remote

 

Es ist ein Hybridplugin, was heisst es kann als Inputplugin für den DVBViewer dienen, aber auch als Plugin für Girder 3.2.9 oder Autohotkey oder sogar eingebaut in eigene Applikationen.

 

Vorausgesetzt wird .NET 3.5. Es ist dafür zu sorgen dass die "Interop.X10.dll" durch die Hostapplikation gefunden werden kann. Also entweder man hat ein eigenes Verzeichnis für alle .NET Interops welches durch die PATH-Environmentvariable zugänglich gemacht wird oder man kopiert die dll in das DVBViewer/Girder Stammverzeichnis (nicht in das Plugin Verzeichnis).

 

Das Plugin muss zunächst konfiguriert werden. Über DVBViewer/Settings/Options/Input/Inputplugins/Settings bzw.

Girder/File/Settings/Plugins/ExTen'ded Remote/Settings kommt man in den entsprechenden Dialog.

 

post-2941-1260778752_thumb.png

 

Zunächst werden alle Tasten der Fernbedienung angelernt. Learn-Button und alle Tasten anlernen. Der "Key Name" kann editiert werden, z.B. damit er mit der Bezeichnung auf der Fernbedienung übereinstimmmt. Der "Mode" bestimmt die Art wie der Code für jede Taste einzeln generiert wird.

 

NATIV - Es werden Eventstrings der Form X10_DN_*, [X10_RT_*, X10_RT_*, ... ] X10_UP_* erzeugt. Diese stimmmen also mit den Eventstrings des bekannten Girder X10-Plugins überein.

 

SIMPLE - Hier werden Eventstrings der Form X10_* [X10_*, ...] erzeugt. Also beim Drücken X10_*. Wird die Taste

eine Weile gedrückt gehalten, folgen weitere X10_*. Das Loslassen der Taste generiert keinen Code. Dies ist der Mode den Lars in seinem Plugin verwendet.

 

COMPLEX - Die Eventstrings sehen hier wie folgt aus: Wird die Taste kurz gedrückt: X10_KEY_*. Ausgelöst wird hier allerdings erst nach Loslassen der Taste plus einem kleinem Timeout. Das hängt damit zusammen dass man die Taste auch "double klicken" kann - X10_DBL_*. Schliesslich kann man die Taste auch eine Weile gedrückt halten was ein einzelnes X10_HLD_* generiert.

 

In Abhängigkeit vom Mode werden auf der rechten Dialogseite ("Generic Keys") diese Keys angezeigt und können weiter modifiziert werden. Die Checkbox "Channel" bewirkt dass die Kanalnummmer in den Eventstring mit aufgenommen wird. Das ist nützlich wenn man mehrere X10 Fernbedienungen oder eine bei der man den Kanal wechselt benutzt. Alle akzeptierten Kanäle kann man in der "Channels"-Box oben auswählen.

 

Schließlich gibt es noch "in-1". Damit wird das Verhalten von 6-in-1, 8-in-1 etc. Fernbedienungen emuliert. Die Menge der Tasten die dieses Feld gescheckt haben dienen als "Geräteauswahltasten" die die "Codepage" wechseln. Erreicht wird dies indem der generische Code dieser Taste solange dem Code der zuletzt gedrückten Taste vorangestellt wird, bis eine andere "in-1" Taste gedrückt wird.

 

Ansehen kann man sich dies alles im "Event Monitor", Links RAW und rechts der generische Code.

 

Hier noch ein Beispiel wie man dieses Plugin unter Autohotkey verwendet:

 

; Save the following script as "Receiver.ahk" then launch it:
#SingleInstance

DetectHiddenWindows On
active_id := WinExist(A_ScriptFullPath . " ahk_class AutoHotkey")

DllCall("Exten.dll\Attach", "int", active_id ) 
;DllCall("ExTen.dll\ShowSettings", "int", active_id ) 


OnMessage(0x4a, "Receive_WM_COPYDATA")  ; 0x4a is WM_COPYDATA
return

Receive_WM_COPYDATA(wParam, lParam)
{
   StringAddress := NumGet(lParam + 8)  ; lParam+8 is the address of CopyDataStruct's lpData member.
   StringLength := DllCall("lstrlen", UInt, StringAddress)
   if StringLength <= 0
       ToolTip %A_ScriptName%`nA blank string was received or there was an error.
   else
   {
       VarSetCapacity(CopyOfData, StringLength)
       DllCall("lstrcpy", "str", CopyOfData, "uint", StringAddress)  ; Copy the string out of the structure.
       ; Show it with ToolTip vs. MsgBox so we can return in a timely fashion:
       ToolTip %A_ScriptName%`nReceived the following string:`n%CopyOfData%
   }
   return true  ; Returning 1 (true) is the traditional way to acknowledge this message.
}


 

Dies zeigt auch wie man dieses Plugin in eigene Apps einbinden kann:

 

ExTen.dll laden

Attach( ReceiverWindow )

evt. ShowSettings( ParentWindow )

Die WM_COPYDATA Message liefert den Eventstring

Detach()

 

Ein C# Beispiel inclusive Quelltext ist angefügt.

 

 

 

 

Viel Spass und frohe Weihnachten erwin

Edited by erwin
Link to comment

Find ich genial. Ich bin wieder dabei *g* .

 

Wenn ich das alles richtig verstanden habe, ist der Vorteil, dass dieses Plugin über Doppelklick- und Hold-Funktion, sowie mittels der Kanäle, Tasten mehrfachbelegen kann.

 

Vorausgesetzt wird .NET 3.5. Es ist dafür zu sorgen dass die "Interop.X10.dll" durch die Hostapplikation gefunden werden kann. Also entweder man hat ein eigenes Verzeichnis für alle .NET Interops welches durch die PATH-Environmentvariable zugänglich gemacht wird oder man kopiert die dll in das DVBViewer/Girder Stammverzeichnis (nicht in das Plugin Verzeichnis).

Sind die Anforderungen nicht dieselben wie für Lars' X10-Plugin? Wenn ich mich recht entsinne reicht es, die msvcr71.dll im System32-Verzeichnis zu haben.

 

 

So wie ich das sehe, ist der X10Receiver.NET nun komplett überflüssig geworden. Man muss halt wissen, wo man das freie Girder 3.2.9 herbekommt. Autohotkey kenne ich nicht.

Edited by CiNcH
Link to comment
Wenn ich das alles richtig verstanden habe, ist der Vorteil, dass dieses Plugin über Doppelklick- und Hold-Funktion, sowie mittels der Kanäle, Tasten mehrfachbelegen kann.

Ja. Und dies für jede Taste extra. Z.B. empfiehlt sich für Volume Up/Down der SIMPLE-Mode, da dann die Lautstärke solange verändert wird wie die Taste gehalten wird. Bei COMPLEX wäre das nicht der Fall.

 

Apropos ist Dir auch aufgefallen dass bei Volume Down (der Beschriftung entsprechend) raw ein VolumeUp generiert wird?

 

Sind die Anforderungen nicht dieselben wie für Lars' X10-Plugin? Wenn ich mich recht entsinne reicht es, die msvcr71.dll im System32-Verzeichnis zu haben.

Nein dies ist ein .NET Projekt und erfordert die ensprechende Runtime. Interop.X10.dll ist nicht mit der X10net.dll zu verwechseln. Die wird so wie auch bei Lars gebraucht.

 

Vor einiger Zeit wurde von potentiellen Plugin-Entwicklern gefragt ob man das DVBV-Plugin-Interface mit einem C#-Wrapper versehen kann. Dies Plugin zeigt, dass es geht. Wenn da noch Bedarf besteht, stelle ich mal die Infos zusammen. Wird aber nichts mehr in diesem Jahr.

 

erwin

Link to comment
  • 3 weeks later...

Ich hatte nun endlich mal die Zeit mir das Plugin anzusehen. Es funktioniert prinzipiell sehr gut. Hier noch ein paar Kommentare von mir (wie immer :) )...

 

Für den 'generic Event' fände ich besser, wenn der 'Key Name' verwendet werden würde. Dann könnte man unter Input im DVBViewer direkt sehen, welche Taste einer Aktion zugewiesen ist, wenn man die oft kryptischen Namen (MTAB, MTAlbum usw.) zuvor editiert hat. Problem dann ist halt, dass wenn man einen Namen nachträglich editiert, sich auch der Event-String ändert und man den DVBViewer Input neu anlernen muss. Aber wenn man das einmal sauber macht, ist es einfach schöner.

 

Was ich auch noch probiert habe ist folgendes:

Wenn man im DVBViewer eine Sofortaufnahme (Instant) stopt, kommt ein OSD mit diversen Auswahl möglichkeiten (Stop, Playback, Restart, Delete usw.). Ich wollte auf den Record Doppelklick Event (X10_DBL_Record) folgende Aktionen zuweisen:

 

Record	 34
OSD-OK	 73

 

Damit sollte die Aufnahme direkt gestoppt werden. Funktioniert nur leider nicht. Probiert habe ich außerdem:

 

Record	 34
Channel1   41

 

und

 

Record	 34
Fav1	   11

 

Alle Aktionsfolgen sollten den ersten Eintrag im OSD (Stop) direkt wählen. Evtl. folgen die Aktionen zu schnell aufeinander..

 

Apropos ist Dir auch aufgefallen dass bei Volume Down (der Beschriftung entsprechend) raw ein VolumeUp generiert wird?

Ja, das ist falsch herum..

 

 

Wo speichert das Plugin die angelernten Tasten? Ich bin wohl blind, aber ich finde nirgends eine entsprechende ini oder dergleichen.

 

 

Kannst du vielleicht den Timeout für Doppelklicks noch einstellbar machen?

Edited by CiNcH
Link to comment

Heute waren alle meine angelernten Tasten verschwunden :) . Wäre schön zu wissen, wo ExTen das persistent macht. Verwendest du da .NET Klassen für? Ich würde die Einstellungen gerne sichern...

 

[EDIT]

OK, hab im DVBViewer unter Inputplugins nicht auf 'Apply' gedrückt. Erst dann lädt ExTen die Tasten.

Edited by CiNcH
Link to comment
Für den 'generic Event' fände ich besser, wenn der 'Key Name' verwendet werden würde.

Hab auch schon mal drüber nachgedacht. Allerdings wird dann der user stärker in die Pflicht genommmen. Doppelte Namen, Sonderzeichenn etc.

 

Alle Aktionsfolgen sollten den ersten Eintrag im OSD (Stop) direkt wählen. Evtl. folgen die Aktionen zu schnell aufeinander..

Solche Doppelbefehle (Aktion+anschließendes OK) habe ich gestern auch versucht zu erstellen. Erstmal erfolglos wie bei Dir. Keine Ahnung woran es liegt. Könntest Du dies mal mit einer IR-FB versuchen?

 

 

Wo speichert das Plugin die angelernten Tasten? Ich bin wohl blind, aber ich finde nirgends eine entsprechende ini oder dergleichen.

Kannst du vielleicht den Timeout für Doppelklicks noch einstellbar machen?

Dafür wird der .NET-Mechanismus verwendet. Es wird eine user.config (XML-Datei) verwendet. Der Ablageort ist etwas kompliziert (.NET) generiert: Allgemein unter

 

{USER_PROFILE}\LOKALE EINSTELLUNGEN\ANWENDUNGSDATEN\{FIRMA}\{?}\{Version}\user.config

 

{Firma} ist z.B. für den DVBViewer: "CM&V_Hackbart" und für Girder: "Bessems-IT"

 

In dieser user.config sollte auch ein Eintrag "DoubleTimeout" stehen. Ich sehs gerade. Er fehlt. OK wird gefixt.

 

OK, hab im DVBViewer unter Inputplugins nicht auf 'Apply' gedrückt. Erst dann lädt ExTen die Tasten.

Stimmt. Hab ich schon verändert. Nächste Version demnächst.

 

erwin

Link to comment
Könntest Du dies mal mit einer IR-FB versuchen?

Werde ich mal mit TechnoTrend-IR ausprobieren. Hast du da schon entsprechende Erfahrungswerte?

 

{USER_PROFILE}\LOKALE EINSTELLUNGEN\ANWENDUNGSDATEN\{FIRMA}\{?}\{Version}\user.config

 

{Firma} ist z.B. für den DVBViewer: "CM&V_Hackbart" und für Girder: "Bessems-IT"

Unter W7 ist der entsprechende Pfad übrigens:

C:\Users\%USER%\AppData\Local\CM&V_Hackbart\DefaultDomain_Path_uuf2hlqyxnurrj4iekdlgzytqugk4fhy\4.2.0.0

 

Könnte man das nicht in weniger generischen Pfaden speichern, damit man die Konfiguration nach Windows-Neuinstallation einfach rückspielen kann?

DVBViewer-Konfigurationsverzeichnisse würden sich anbieten, damit man alles an einem Ort hat. Da muss man dann den usermode (siehe usermode.ini im DVBViewer-Verzeichnis) beachten.

Edited by CiNcH
Link to comment
Werde ich mal mit TechnoTrend-IR ausprobieren. Hast du da schon entsprechende Erfahrungswerte?

Nein. Ich ordne das Problem mit hoher Wahrscheinlichkeit dem DVBV zu, denn schließlich hat das Inputplugin ja schon den ersten Befehl getriggerd und sollte damit aus dem Spiel sein. Aber vielleicht gibs ja doch irgendwelche Nachwirkungen auf denn zweiten Befehl.

 

Das könnte man auch noch etwas verbessern.

Verbessern? Naja die .NET-Entwickler haben sich schon was bei ihrer Settingsarchitektur gedacht ;-) Anfänglich habe ich auch mit ini-Dateien gearbeitet. Aber es war zu umständlich - keine .NET-Unterstützung. Also habe ich das Eingebaute und dafür vorgesehene benutzt. Ich weiss nicht ob der Aufwand wirklich lohnt, hier Konzistenz mit dem DVBV herzustellen.

 

erwin

Link to comment
Verbessern?

Ich habe mein oberes Posting nochmal editiert, bevor du geantwortet hast... Ich fände es nur vorteilhaft, wenn man die Konfiguration automatisch rückspielen könnte, ohne generische Ordnernamen.

Link to comment
Ich fände es nur vorteilhaft, wenn man die Konfiguration automatisch rückspielen könnte, ohne generische Ordnernamen.

Ich auch. Denn auch beim Versionsupgrade gibt es Probleme mit der Übernahme der alten Einstellungen. Also vielleicht nervt mich das dann doch noch gehörig.

 

erwin

Link to comment
Solche Doppelbefehle (Aktion+anschließendes OK) habe ich gestern auch versucht zu erstellen. Erstmal erfolglos wie bei Dir. Keine Ahnung woran es liegt. Könntest Du dies mal mit einer IR-FB versuchen?

Dürfte ein Timing Problem sein. Ich habe folgendes probiert...

 

Folgende Aktionen habe ich auf den Shortcut STRG+R gelegt:

- 34 (Record)

- 73 (OSD-OK)

 

Wenn noch keine Aufnahme läuft und ich STRG+R drücke, wird die Aufnahme gestartet und das MiniEPG angezeigt, sprich, beide Aktionen. Stoppe ich die Aufnahme mit STRG+R wird nur die "Aufnahme beenden" OSD-Liste angezeigt aber nicht mit OSD-OK Eintrag 1 bestätigt.

Link to comment

Kann ich bestätigen. Ich habs auch mit normalen Tastaturshortcut versucht.

 

OSD-EPG+Teletext -> beide Aktionen ziehen (obwohl vielleicht sinnlos in dieser Combo)

OSD-EPG+OSD-OK -> OSD-OK wird nicht wirksam

 

erwin

Link to comment
  • 3 months later...

Ich muss hier auch mal wieder anklopfen, weil ich das Plugin doch gerne einsetzen würde..

 

Gibt es was neues bezüglich des generischen Pfads für das Config-File? Kann man das nicht irgendwie verhindern?

 

Wie sieht es mit den folgenden Dingen aus:

 

Für den 'generic Event' fände ich besser, wenn der 'Key Name' verwendet werden würde.

 

In dieser user.config sollte auch ein Eintrag "DoubleTimeout" stehen. Ich sehs gerade. Er fehlt. OK wird gefixt.

 

 

[EDIT]

OK, so furchtbar generisch ist der Pfad wohl gar nicht.

 

Vor der Windows Neuinstallation:

C:\Users\%USER%\AppData\Local\CM&V_Hackbart\DefaultDomain_Path_uuf2hlqyxnurrj4iekdlgzytqugk4fhy\4.2.0.0

 

Nach der Windows Neuinstallation:

C:\Users\%USER%\AppData\Local\CM&V_Hackbart\DefaultDomain_Path_uuf2hlqyxnurrj4iekdlgzytqugk4fhy\4.4.0.0

 

Wieso nun 4.4.0.0? Versionsupgrade?

Edited by CiNcH
Link to comment

Ein neues Release ist in Vorbereitung

 

- Bugfixes

- ein weiterer Mode = 'EXTENDED' (so wie COMPLEX aber ohne DOUBLE, d.h die Taste reagiert schneller da das Timeout nicht abgewartet werden mus)

- Config nun als INI-Datei im DVBV-Konfigurationsverzeichnis

- 'Key Name' als 'generic event'

- 'Punch Through'-Unterstützung

- HID (WM_APPCOMMMAND)-Unterstützung

 

Allerdings habe ich keine automatische Config-Übernahme implementiert. D.h. ein nochmaliges Anlernen wird erforderlich sein. Ich denke (wenn das nicht zur Regel wird) das ist vertretbar.

 

Nur noch ein par Restarbeiten. Hab in letzter Zeit ziemlich viel Zeit in TimeshiftPlus, insbesondere die OSD-Unterstützung, gesteckt - und komm da nicht so richtig voran. Wenn du es brauchst werde ich mal die Prioritäten ändern.

 

 

erwin

Edited by erwin
Link to comment
- ein weiterer Mode = 'EXTENDED' (so wie COMPLEX aber ohne DOUBLE, d.h die Taste reagiert schneller da das Timeout nicht abgewartet werden mus)

Sorry für die vielleicht dumme Frage.. aber was ist der Unterschied zu SIMPLE? :)

 

- 'Punch Through'-Unterstützung

Muss ich mal googeln :) . [EDIT] klick

 

Ein neues Release ist in Vorbereitung

...

Wenn du es brauchst werde ich mal die Prioritäten ändern.

Alles klar. Dann warte ich auf das nächste Release bis zum produktiven Einsatz. So dringend ist das nicht. Muss nur bei den interessanteren Sachen immer mal wieder nachhaken o:) .

Edited by CiNcH
Link to comment
Sorry für die vielleicht dumme Frage.. aber was ist der Unterschied zu SIMPLE? :)

Wie COMPLEX, ohne DOUBLE aber mit HOLD.

 

Muss ich mal googeln :) . [EDIT] klick

Tasten mit 'in-1' Flag arbeiten wie die Device-Selektortasten auf z.B. 8in1 Universalfernbedienungen. D.h. wenn diese (virtuelle) Taste gedrückt wird, wird den 'generic events' immer der 'generic events' dieser Taste vorangestellt bis eine andere 'in-1'-Taste gedrückt wird. 'Punch Through' im ExTen Zusammenhang bedeutet nun das für Tasten explizit eine andere 'Voranstellung' zugewiesen werden kann, so dass z.B., bleiben wir bei den Lautstärketasten obwohl hier keine Einschränkung besteht, diese Tasten immer denselben 'generic event' liefern unabhängig davon welches *Device gewählt ist*

 

erwin

Link to comment
Dürfte ein Timing Problem sein. Ich habe folgendes probiert...

 

Folgende Aktionen habe ich auf den Shortcut STRG+R gelegt:

- 34 (Record)

- 73 (OSD-OK)

 

Wenn noch keine Aufnahme läuft und ich STRG+R drücke, wird die Aufnahme gestartet und das MiniEPG angezeigt, sprich, beide Aktionen. Stoppe ich die Aufnahme mit STRG+R wird nur die "Aufnahme beenden" OSD-Liste angezeigt aber nicht mit OSD-OK Eintrag 1 bestätigt.

Hast Du zu diesem Thema neue Informationen oder wie hast du das jetzt gelöst?

 

erwin

Link to comment
Hast Du zu diesem Thema neue Informationen oder wie hast du das jetzt gelöst?

Nein, da habe ich im Moment keine Lösung für. Werde das Thema aber bei Gelegenheit noch einmal aufgreifen.

Edited by CiNcH
Link to comment
- HID (WM_APPCOMMMAND)-Unterstützung

Das könnte ich bei Bedarf mit dem Satelco EasyWatchTV Fernbedienungsset testen.

 

Ich kenne mich mit dem WM_APPCOMMAND noch nicht wirklich aus, aber ich glaube bei der Satelco-FB haben wohl viele Tasten proprietäre Commands!? :)

Link to comment
Das könnte ich bei Bedarf mit dem Satelco EasyWatchTV Fernbedienungsset testen.

Ich meine es anders herum. Da da meisten Mediaplayer bereits eingebauten WM_APPCOMMAND Support haben, dachte ich mir es wäre sinnvoll die X10-FB zu befähigen solche APPCOMMANDs auszusenden.

 

Wenn du deine Satelco-FB bezüglich dieser *proprietäre Commands* mit DVBV testen willst, ist das vielleicht eine Option

 

http://www.DVBViewer.info/forum/index.php?...st&p=291044

 

erwin

Link to comment

Gibts bei dem Plugin auch eine "richtige" DVBV-Unterstützung?

D.h. x10 Event in Com-Befehl umgesetzt (wie es bei Eventghost gelöst)?

Das WM_APPCOMMAND Zeugs scheint mir nämlich etwas wacklig :)

Link to comment
Gibts bei dem Plugin auch eine "richtige" DVBV-Unterstützung?

D.h. x10 Event in Com-Befehl umgesetzt (wie es bei Eventghost gelöst)?

Mal von der oben beschriebenen WM_APPCOMMAND-Geschichte abgesehen, erzeugt das Plugin aus X10 Events konfigurierbare (Event-) Strings die direkt (also ohne COM) dem DVBV über seine Callbackfunktion übergeben werden. Somit ist das "richtige" DVBV-Unterstützung.

 

Aber dieses Plugin kann auch als Girder-Plugin fungieren. Eventghost-Unterstützung wollte ich ursprünglich auch bieten. Es ist daran gescheitert das ich nichts darüber gefunden habe wie solche DLL's für Eventghost aufgebaut sein müssen, obwohl es Ausagen gibt dass mit einer entsprechenden DLL Eventghost neue Inputs beigebracht werden können

 

 

erwin

Link to comment

Ah ok.

 

Wie Events in EG erzeugt werden kannst du vielleicht einem RemotePlugin entnehmen, deren Source (Python - seltsamer Syntax ...) immer im Pluginordner liegt.

Das EG eigene x10 Plugin scheint ohne eigene DLL auszukommen.

Oder du fragst mal bei Prinz an, der ist fit in Sachen EG.

Edited by nuts
Link to comment
  • 1 month later...

Ich hab die gestrige Version noch mal geupdatet:

 

http://www.DVBViewer.info/forum/index.php?...st&id=23930

 

 

 

Hier nun die Anleitung.

 

ExTen'ded remote

 

ist ein Hybridplugin, was heisst es kann sowohl als Inputplugin für den DVBViewer dienen, aber auch als Plugin für Girder 3.2.9 oder Autohotkey oder sogar eingebaut in eigene Applikationen.

 

Vorausgesetzt wird .NET 3.5. Es ist dafür zu sorgen dass die "Interop.X10.dll" durch die Hostapplikation gefunden werden kann. Also entweder man hat ein eigenes Verzeichnis für alle .NET Interops welches durch die PATH-Environmentvariable zugänglich gemacht wird oder man kopiert die Interop.X10.dll in das DVBViewer/Girder Stammverzeichnis (nicht in das Plugin Verzeichnis).

 

Das Plugin muss zunächst konfiguriert werden. Über DVBViewer/Settings/Options/Input/Inputplugins/Settings bzw. Girder/File/Settings/Plugins/ExTen'ded Remote/Settings kommt man in den entsprechenden Dialog.

 

post-2941-1274864586_thumb.png post-2941-1274868284_thumb.png

 

Die Konfiguration wird in einer ExTen.ini gespeichert. Die Datei liegt i.d.R. im selben Verzeichnis wie die ExTen.dll. Im Falle vom DVBV kommt jedoch die Methodik über die usermode.ini zum Einsatz, d.h. die Einträge dort bestimmen letztlich den Ablageort. Wenn im durch die usermode.ini bestimmten Verzeichnis KEINE ExTen.ini vorgefunden wird, wird eine Kopie der ExTen.ini im ExTen.dll-Verzeichnis erzeugt. Daraus folgt, man sollte zunächst diese "Default-Ini" gut konfigurieren. Ein solches "Default-Ini"-Template liegt bei, und zwar für diese X10-Fernbedienung hier:

 

post-2941-1274864900_thumb.png

 

Hat man eine andere X10-Fernbedienung löscht man am Besten über CLEAR zunächst die gesamten Einträge und lernt zunächst die Tasten neu an. Dazu ist zunächst im CHANNELS Checkboxbereich derjenige Kanal zu setzen welcher nicht gefilter werden soll. Nur Events von gecheckten Kanälen werden weiter behandelt, alle anderen werden ignoriert.

 

ACHTUNG: Unterschied zum X10-Plugin von Lars_MQ:

Dieselben Tasten auf unterschiedlichen Kanälen (auch baugleicher FB) können unterschiedlich konfiguriert werden.

 

Dennoch sollte man nicht auf mehr Kanäle anlernen als notwendig (Performance!). Bedenken hinsichtlich einer möglichen späteren Störung durch einen Nachbarn auf derselben X10-Frequenz braucht man nicht zu haben. Per Drag&Drop kann sehr schnell auf einen anderen Kanal umgezogen werden.

 

Weiss man nicht auf welchem Kanal die FB sendet, geht man über den LEARN-Button in den Lernmodus und drückt Tasten. Der Dialog fragt dann ob der empfangene Kanal verwendet werden soll oder nicht.

 

Nach Kanaleinstellung und LEARN-Button drückt man jede Taste auf der FB einmal. Die vorgeschlagenen Namen kann man editieren und so der Bezeichnung auf der FB anpassen. Von diesen Namen werden die Eventstrings abgeleitet, die letztlich der DVBV erhält. Gleiche Namen für dieselbe Taste auf verschiedenen Kanälen können somit zu gleichen Aktionen führen; so wie auch unterschiedliche Namen für dieselbe Taste auf verschiedenen Kanälen zu unterschiedlichen Aktionen führen können. Je nach Gusto.

 

Die Auswahlbox "Mode" bestimmt die Art wie der Code für jede Taste einzeln generiert wird.

 

NATIV - Es werden Eventstrings der Form "Tastenname Down", ["Tastenname Repeat", "Tastenname Repeat", ... ], "Tastenname Up" erzeugt.

 

SIMPLE - Hier werden Eventstrings der Form "Tastenname" ["Tastenname", ...] erzeugt. Also beim Drücken "Tastenname". Wird die Taste eine Weile gedrückt gehalten, folgen weitere "Tastenname". Das Loslassen der Taste generiert keinen Code. Dies ist der Mode den Lars in seinem Plugin verwendet.

 

COMPLEX - Die Eventstrings sehen hier wie folgt aus: Wird die Taste kurz gedrückt: "Tastenname". Ausgelöst wird hier allerdings erst nach Loslassen der Taste plus einem kleinem Timeout. Das hängt damit zusammen dass man die Taste auch "double klicken" kann - "Tastenname Double". Schliesslich kann man die Taste auch eine Weile gedrückt halten was ein einzelnes "Tastenname Hold" generiert.

 

EXTENDET - So wie COMPLEX aber ohne die Double-Möglichkeit. Das erspart das Abwarten des Timeouts, d.h. ein kurzer Druck löst schneller aus.

 

In der vorliegenden ExTen.ini sind einige Tasten im SIMPLE-Mode angelegt, und zwar jene von denen ein Autorepeat erwartet wird (Volume-/Volume+, Cursor, etc.).

 

In Abhängigkeit vom Mode werden auf der rechten Dialogseite ("Generic Keys") die generischen Keys angezeigt.

 

Sind die Tasten angelernt, mit Namen versehen und der Mode gewält, ist diese Konfiguration prinzipiell arbeitsfähig.

 

 

Weitere Modifikationen:

 

Mit der "in-1"-Checkbox wird das Verhalten von 6-in-1, 8-in-1 etc. Universalfernbedienungen emuliert. Die Menge der Tasten die dieses Feld gescheckt haben dienen als Geräteauswahltasten" die die Codepage wechseln. Erreicht wird dies indem der generische Code dieser Taste solange dem Code der zuletzt gedrückten Taste vorangestellt wird, bis eine andere "in-1" Taste gedrückt wird. Jeder dieser Tasten kann eine eigene Codepage als auch ein Kommentar zugewiesen werden. Die Default-Codepage (Button) kommt zum Einsatz wenn überhaupt nicht mit x-in-1 Funktionalität gearbeitet wird oder dient als Vorlage beim Erstellen neuer Codepages. Diese sollte also zuerst editiert werden.

 

Das Key Name-Feld enthält den generischen Namen der Taste plus vorangestellt die Kanalnummer (zur Unterscheidung bei gleichen Namen). Was letztendlich den DVBV erreicht, steht im Feld generic Event und kann auch im Event-Monitor beobachtet werden.

 

Dann gibt es das Feld Punch Through. Punch Through bei gewöhnlichen Universalfernbedienungen bedeutet die Fähigkeit bei bestimmten Tasten trotz ausgewähltem Gerät/Codepage den Code einer anderen (meist TV) Codepage zu senden. Z.B werden die Volume-Tasten an den TV gesendet obwohl eigentlich vielleicht gerade der Recorder gesteuert wird. Meist sind diese Spezialtasten fest vorgegeben. Anders bei ExTen'ded remote. Hier kann jede Taste einzeln mit einem Punch Through modifiziert werden. Sind beispielsweise Live TV Hold und DVD Menu Hold x-in-1 Tasten, werden im Auswahlfeld Live TV Hold:: und DVD Menu Hold:: als Punch Through angeboten. Dies sind dann auch die Zeichenketten die den Eventstrings anstatt dem geraden aktuellen Präfix vorangestellt werden.

 

Da ich in meinem ExTen.ini Beispiel Live TV Hold als DVBViewer-Geräteauswahltaste definiert habe und mit dem dortigen Record-Eventstring im DVBV die gleichnamige Action angelernt habe, ist defaultmäßihg die Record-Taste mit dem Live TV Hold:: Punch Through versehen: Live TV Hold::Record. Instantaufnahmen müssen meist schnell gehen und gerade auf dem "falschem" Gerät zu sein, ist dann ziemlich enttäuschend.

 

Als weitere Punch Through gibt es HID KEY:: und HID APPCOMMAND::

 

HID KEY:: Es wird ein normales Tastaturevent für das momentane Window im Vordergrund generiert (also NICHT an den DVBV direkt übergeben). Welches Event das ist, kann im Feld "generic Event" ausgewählt werden und im (namenlosen) Feld davor mit Modifizierern (SHIFT, CTRL ALT) versehen werden.

 

HID APPCOMMAND:: Es wird ein Appcommand-Event für das momentane Window im Vordergrund generiert (also NICHT an den DVBV direkt übergeben). Welches Event das ist, kann im Feld "generic Event" ausgewählt werden und im (namenlosen) Feld davor mit Modifizierern (SHIFT, CTRL) versehen werden. Zum Thema APPCOMMAND siehe vielleicht hier:

 

http://www.DVBViewer.info/forum/index.php?...st&p=290471

 

Dort gibt es auch ein Inputplugin für den DVBV für den Empfang solcher APPCOMMANDS. Vorteil der APPCOMMANDS: Die Applikation (zumindest beim erwähnten DVBV-Inputplugin ist das so) braucht im Gegensatz zu Tastaturevents nicht im Vordergrund zu sein. Weiterhin gehören APPCOMMANDs bei fast aller Player-Software zum guten Ton und ist für die gängigsten Befehle (Play, Pause etc) mit gleichen Funktionen belegt (einheitliche Steuerung). Wegen dieser Einheitlichkeit finden sich auch viele HID APPCOMMAND:: in der Defaultcodepage wieder.

 

Ein weiteres Punch Through ist MACRO::. Macro sendet eine vorher definierte Folge von generic Keys. Hiermit kann z.B. dieses Problem angegangen werden:

 

http://www.DVBViewer.info/forum/index.php?...st&p=278192

 

Dieses Punch Through ist allerdings nur per "Tweak" also händischem Editieren der ExTen.ini (auf jeden Fall Backup-Kopie anlegen) aktivierbar. In der Section [MACRO] der ini-Datei ist für jedes Makro eine Zeile der Form

 

Name=Key1;Delay1;Key2;Delay2;...

 

einzufügen.

 

Dabei ist Delay jeweils eine Verzögerung in Millisekunden und Key ein generische Key-Bezeichnung mit oder ohne Punch Through-Präfix. Also z.B. Live TV Hold::Power oder nur Power. Fehlt der Präfix, dann wird der aktuelle verwendet. Nicht zulässig ist der MACRO:: Punch Through-Präfix. HID Key:: und HID APPCOMMAND:: sind zulässig. Diese werden so wie definiert gesendet. Bezeichnet Key kein "HID ..." wird die Key Definition zuerst hinsichtlich der Modifikationen der jeweiligen Codepage aufgelöst. Sie können somit selbst wieder zu "HID .." nicht aber zu MACRO:: führen. Regelverletzungen (Schreibfehler bei der Keybezeichnung, MACRO:: in MACRO:: etc. ) werden einfach ignoriert. Für Debuggingzwecke kan man über die Checkbox "Logging" ein Log mitlaufen lassen.

 

Normalerweise wird pro generischer Taste ein Eventstrings an den DVBV (oder HID) übergeben. Anders wenn eine in-1-Taste gedrückt wird und somit die Codepage wechselt. Hier wird der Code der alten Codepage als auch der neuen Codepage generiert.

 

Beispiel:

aktuelle Codepage: Live TV Hold::

in-1-Taste: DVD Menu Hold::

Codefolge: Live TV Hold::DVD Menu Hold; DVD Menu Hold::DVD Menu Hold

 

Wenn diese Doppelfolgen unerwünscht sind kann das Senden von Tastencodes über MACRO:: Punch Through mit leerem Namen total unterbunden werden (gilt für alle Tasten). Aber auch sinnvolle Sachen sind möglich (ACHTUNG DVBViewer Switch Verschnitt):

 

Live TV Hold::DVD Menu Hold -> setzt DVBV in PAUSE

DVD Menu Hold::DVD Menu Hold -> startet PowerDVD

DVD Menu Hold::Live TV Hold -> beendet PowerDVD

Live TV Hold::Live TV Hold -> setzt DVBV in PLAY

 

Per Drag&Drop kann eine Codepage auf eine andere Taste verschoben oder (CTRL) kopiert werden.

 

Hier noch ein Beispiel wie man dieses Plugin unter Autohotkey verwendet:

 

; Save the following script as "Receiver.ahk" then launch it:
#SingleInstance

DetectHiddenWindows On
active_id := WinExist(A_ScriptFullPath . " ahk_class AutoHotkey")

DllCall("Exten.dll\Attach", "int", active_id )
;DllCall("ExTen.dll\ShowSettings", "int", active_id )


OnMessage(0x4a, "Receive_WM_COPYDATA"); 0x4a is WM_COPYDATA
return

Receive_WM_COPYDATA(wParam, lParam)
{
StringAddress := NumGet(lParam + 8); lParam+8 is the address of CopyDataStruct's lpData member.
StringLength := DllCall("lstrlen", UInt, StringAddress)
if StringLength <= 0
ToolTip %A_ScriptName%`nA blank string was received or there was an error.
else
{
VarSetCapacity(CopyOfData, StringLength)
DllCall("lstrcpy", "str", CopyOfData, "uint", StringAddress); Copy the string out of the structure.
; Show it with ToolTip vs. MsgBox so we can return in a timely fashion:
ToolTip %A_ScriptName%`nReceived the following string:`n%CopyOfData%
}
return true; Returning 1 (true) is the traditional way to acknowledge this message.
}

 

 

Dies zeigt auch wie man dieses Plugin in eigene Apps einbinden kann:

 

ExTen.dll laden

Attach( ReceiverWindow )

evt. ShowSettings( ParentWindow )

Die WM_COPYDATA Message liefert den Eventstring

Detach()

 

 

Ein C# Beispiel inclusive Quelltext liegt bei.

 

Diese Beispiel kann auch verwendet werden, wenn man PowerDVD ohne laufenden DVBV steuern möchte. Es kann dazu in den Tray verschoben werden. Auch ein Start mit -m Parameter bewirkt dasselbe beim Start.

 

So da das nun doch ein ziemlich komplexes Produkt geworden ist werden Bugs nicht ausbleiben. Bitte wie auch Verbesserungsvorschläge melden. (THX@CiNCH in dieser Hinsicht).

 

Wer sich bedanken will und wem die englichen Sprache flüssig von der Feder läuft kann ja eine Übersetzung für unsere English Men in the World bereitstellen.

 

erwin

Edited by erwin
Link to comment

Hallo Erwin,

 

Vielen Dank für dein Plugin. Könntest du bitte noch dein Remote Profile zur Verfügung stellen, so dass man die X10 nicht neu anlernen muss?

 

Danke im voraus.

Link to comment
Vielen Dank für dein Plugin. Könntest du bitte noch dein Remote Profile zur Verfügung stellen, so dass man die X10 nicht neu anlernen muss?

Werd ich tun. Problem dabei, ich hab im Moment keine richtig schöne. Hängt mit den Tests der vielen Möglichkeiten zusammen. Da hab ich mal schnell was angelernt was eigentlich aus DVBV-Sicht nicht so das gelbe vom Ei ist. Und bei den vielen Möglichkeiten eine gute Konfiguration zu erstellen braucht auch etwas Überlegung und Ausprobierei. Ich denke Du kommst bis morgen/übermorgen mit Selbstanlernen zu einem besserem Ergebnis.

 

Ansonsten wer denkt er hat was Vorzeigbares (ExTen.ini; Remote Profile) bitte hier posten.

 

erwin

Link to comment

Eine "nicht richtig schöne" ist vielleicht besser als gar keine um mal so grob zu verstehen wie dein Plugin funktioniert.

Aber vielleicht mach ich mir im Moment einfach nen zu grossen Kopp darüber, und es macht klick bei mir wenn ich nicht mehr trocken teste.

Werd mich heut abend mal damit näher auseinander setzen.

Link to comment

Ich denke schon dass der klick kommt. Wenn Du dieselbe FB hast brauchst Du nicht weiter zu tun. Im DVBV/Options/Input das Plugin anhacken. Dann eine DVBV-Funktion aussuchen. Button LEARN (im DVBV), FB Tasten drücken und sehen was passiert. Wenn so gar nichts geht könnte es der falsche Kanal sein.

 

erwin

Link to comment
Es misch sich je nach Taste trotzdem das WMC ein.

Ja diverse Programme mischen sich ein. D.h. sie installieren (ungefragt) gewisse Server die die X10-Events abfangen. Z.B PowerDVD. Jeder Druck auf DVD Menu startet PowerDVD:

 

http://www.DVBViewer.info/forum/index.php?...st&p=282528

 

Abhilfe hier: PDVD9Serv.exe aus der Autostart entfernen. Zusätzlich umbenennen da jeder Start von PowerDVD diese wieder startet. Nach meinen Recherchen ist dieses Serverprogramm ausschließlich für den PowerDVD Start über X10 gedacht. Selbst eine Auswertung von anderen X10 events habe ich nicht beobachten können (auf meiner FB).

 

Ähnlich ist es bei WMC. Hier heist der Übeltäter wohl ehtray.exe. Zu Auswirkungen und Nebenwirkungen kann ich nichts sagen. Habe kein WMC.

 

Und bei WinDVD ist wohl WinCinemaMgr.exe beteiligt.

 

erwin

Link to comment
  • 1 month later...
  • 4 weeks later...

Hi Leute,

 

bin auch wieder einmal anwesend. Hab grad die neue Version des Plugins ausprobiert. Großes Kompliment. Lässt keine Wünsche mehr offen. Ich finde das von der Usability super, wenn in den DVBViewer-Eingaben der wirkliche Name, wie er auf der Fernbedienung aufgedruckt ist, angezeigt wird, was nun ja möglich ist. Auch klasse, dass nun für die Persistenz der Einstellungen kein MS-Framework mehr verwendet wird, wo man die Daten irgendwo in einem generischen Pfad in den Tiefen des OS findet. Den Extended Modus finde ich auch klasse. Rundum gelungen!

Link to comment
  • 1 month later...

Sehr interessant.

Was mir jetzt beim ersten testen aufgefallen ist: Es misch sich je nach Taste trotzdem das WMC ein.

System läuft @Win7 mit dieser remote: http://cgi.ebay.de/MCE-Fernbedienung-XP-Vi...=item5d2948b973 (allerdings hat die auch mal nur 10€ gekostet - sehr seltsam ...)

 

Ist das Treiber abhängig?

 

1. Disable der Standard WMC Funktionen:

 

http://www.eventghost.org/forum/viewtopic.php?f=1&t=670

 

2. ExTen für WMC konfigurieren.

Eine x-in-1 Taste für WMC auswählen. Shortcuts aus

 

http://windows.microsoft.com/de-DE/windows-vista/Windows-Media-Center-keyboard-shortcuts

 

als HID Key-Punch-Through konfigurieren.

 

Jetzt kann WMC gesteuert werden wenn es den Fokus hat (und DVBV/ExTen bzw der Monitor läuft).

 

BTW. Windows-Taste+ALT+EINGABETASTE ist der Shortcut zum Starten des WMC. Die Windows-Taste kann in der jetzigen ExTen-Version nicht verwendet werden (nur SHIFT, CTRL, ALT). Werd ich einbauen.

 

 

erwin

Link to comment
  • 10 months later...

Moin @ all,

 

ich brauche mal Starthilfe zu diesem Plugin.

 

In welche Ordner müssen welche Dateien, um den DVBViewer mit Girder zu bedienen, und wo befindet sich dann die Konfigurationsdatei?

 

Komme da nicht wirklich weiter.

 

Vielen Dank im Vorraus.

 

Gruß Joachim

Link to comment

Interop.X10.dll -> in das Verzeichnis der Application, also dort wo DVBViwer.exe bzw. Girder.exe

ExTen.dll, ExTen.ini -> Plugin-Verzeichnis, also DVBViewer\Plugins bzw. Girder\Plugins

 

Girder ist optional (falls man auch andere Apps als DVBV steuern möchte)

 

Bez. ExTen.ini beachte:

 

Die Konfiguration wird in einer ExTen.ini gespeichert. Die Datei liegt i.d.R. im selben Verzeichnis wie die ExTen.dll. Im Falle vom DVBV kommt jedoch die Methodik über die usermode.ini zum Einsatz, d.h. die Einträge dort bestimmen letztlich den Ablageort. Wenn im durch die usermode.ini bestimmten Verzeichnis KEINE ExTen.ini vorgefunden wird, wird eine Kopie der ExTen.ini im ExTen.dll-Verzeichnis erzeugt.

Link to comment
  • 2 years later...

Ich habe den X10 Empfänger gestern mal auf einem jungfräulichen 64-Bit Windows 7 installiert und wollte hier mal meine Erfahrungen posten, vor allem auch in Hinblick auf etwaige Abstürze.

 

Ich verwende den 64-Bit-Treiber von hier. Abstürze habe ich damit im Betrieb keine feststellen können, dafür aber 2 andere Probleme, die jedoch lösbar sind...

 

(1)

Der DVBViewer führt zum Teil 2 Aktionen bei einem Tastdruck aus. Der Grund ist, dass für den X10 Empfänger 2 Treiber installiert werden, ein Standard-USB-Treiber sowie ein HID-Treiber. D.h. zum einen wird der Tastendruck vom ExTen-Plugin verarbeitet, zum anderen vom DVBViewer selber nochmal, der einen HID emulierten Keyboard-Tastendruck bekommt.

Man kann nun entweder das entsprechende HID-Gerät im Geräte-Manager deaktivieren oder dem HID-Mapper ('xcplmed.exe', zu finden unter 'C:\Program Files (x86)\Common Files\X10\Common) einen nicht verwendeten X10 Funkkanal zuweisen:

hid_config.jpg

 

(2)

Ist kein X10-Treiber installiert, stürzt das ExTen Plugin beim Laden durch den DVBViewer scheinbar ab:

exten_crash.jpg

 

Aufgefallen ist mir das, weil ich eine gescriptete DVBViewer-Standard-Installation habe, die auch das ExTen-Plugin (+ Interop.X10.dll) beinhaltet. Natürlich ist nicht überall ein X10-Empfänger installiert...

Link to comment

Hallo CiNcH,

 

danke für die Erklärung. Ich verwende auf den Windows 7 X10-Treiber und hatte ähnliche Probleme. Irgendwie habe ich es immer hinbekommen, aber nie verstanden wie und warum. Jetzt ist mit einies klar geworden.

 

Ich benutze aber nicht ExTen sondern EventGhost.

 

Gruß, dgdg

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...