Zunächst einmal der C# Quellcode des PlugIns:
using System; // Für MarshalByRefObject
using Microsoft.Win32; // Für den Zugriff auf die Registry
using System.Collections; // Liefert Anwendungsinformationen
using Microsoft.MediaCenter.AddIn; // MediaCenter Steuerungsoptionen
namespace AC3FilterAddIn
{
public class mceAC3Filter : MarshalByRefObject, IAddInModule, IAddInEntryPoint
{
private AddInHost mcHost;
private MediaTransport mcMediaTransport;
private RegistryKey rk = Registry.CurrentUser.OpenSubKey("Software\\AC3Filter\\preset\\Default");
void IAddInModule.Initialize(IDictionary dictAppInfo, IDictionary dictEntryPoint)
{
}
void IAddInModule.Uninitialize()
{
}
void IAddInEntryPoint.Launch(AddInHost host)
{
this.mcHost = host;
// Test-Dialog um zu prüfen, ob AddIn geladen wurde.
mcHost.HostControl.Dialog("AddIn wurde geladen...","mceAC3Filter",1,10,false);
}
public double GetValue(String sValue)
{
double dValue = (double)this.rk.GetValue(sValue);
dValue = 20 * Math.Log10(dValue);
return dValue;
}
public double GetStraightValue(String sValue)
{
double dValue = (double)this.rk.GetValue(sValue);
return dValue;
}
public void SetValue(String sValue, double dValue)
{
if(this.PlayingCheck() == false)
{
dValue = Math.Pow(10, dValue / 20);
this.rk.SetValue(sValue, dValue);
}
}
public void SetStraightValue(String sValue, double dValue)
{
if(this.PlayingCheck() == false)
{
this.rk.SetValue(sValue, dValue);
}
}
private bool PlayingCheck()
{
bool check;
int playing = this.mcMediaTransport.PlayState.CompareTo(PlayState.Playing);
int paused = this.mcMediaTransport.PlayState.CompareTo(PlayState.Paused);
if(playing == 1 || paused == 1)
{
this.mcHost.HostControl.Dialog("Bitte beenden Sie zuerst die aktuelle Wiedergabe.","Speichern nicht möglich",1,10,false);
check = true;
}
else
{
check = false;
}
return check;
}
public void ErrorMessage1001()
{
this.mcHost.HostControl.Dialog("Keine Werte gefunden!","Fehler code #1001",1,10,false);
}
}
}
Und hier der JS-Teil vom HTML-Code:
<script src="BasicFunctions.js" type="text/javascript"></script>
<script src="Scrolling.js" type="text/javascript"></script>
<script src="MoveFocus.js" type="text/javascript"></script>
<script src="Spinner.js" type="text/javascript"></script>
<script>
var mceAC3Filter = new ActiveXObject("AC3FilterAddIn.mceAC3Filter");
function pageLoadFunctions()
{
checkSVP();
setCounter();
setArray();
startFocus();
SetSpinnerValue('master',mceAC3Filter.GetValue("master"));
SetSpinnerValue('clef',mceAC3Filter.GetValue("clev"));
SetSpinnerValue('slev',mceAC3Filter.GetValue("slev"));
SetSpinnerValue('lfelev',mceAC3Filter.GetValue("lfelev"));
}
function doSelect()
{
/* This function determines what your buttons do when they are selected
(navigate, call a function, etc.). This function will get called whenever user
clicks a focusable item, or selects it with "OK" button on remote. Make sure to
include a case below for each focusable item on the page */
var url = ""
switch(oCurFocus.id)
{
case "btnMainGains": url = "main_gains.htm"; break;
case "btnChannelGains": url = "channel_gains.htm"; break;
case "btnLautsprecher": url = "lautsprecher.htm"; break;
case "btnAbout": url="about.htm"; break;
case "btnSave": SetValue("master");
SetValue("clev");
SetValue("slev");
SetValue("lfelev");
url="default.htm"; break;
}
if (url != "") window.navigate(url);
}
<!-- Compares all options of spinner which is given as first parameter (id) with the value -->
<!-- which is given as second parameter (wert) and sets the spinner to this option. -->
<!-- If no option of the spinner compares to the value, the spinner is set to "0" and -->
<!-- an error message appears. -->
function SetSpinnerValue(id,wert)
{
for (i = 0; i < document.getElementById(id).length; ++i)
{
if (document.getElementById(id).options[i].text == wert)
{
document.getElementById(id).options[i].selected = true;
}
else
{
document.getElementById(id).options[21].selected = true;
mceAC3Filter.ErrorMessage1001();
}
}
}
<!-- Saves the Value of the Spinner given in parameter one (id) in the registry. -->
function SetValue(id)
{
var SpinnerValue = GetSpinnerValue(id);
mceAC3Filter.SetValue(id,SpinnerValue);
}
<!-- Gets the Value of the spinner given in parameter one (id). -->
function GetSpinnerValue(id)
{
var Index = document.getElementById(id).selectedIndex;
var SpinnerValue = document.getElementById(id).options[Index].text;
return SpinnerValue;
}
</script>
Das PlugIn habe ich mittels der RegisterMCEApp.exe in MediaCenter registriert und es wird auch beim Start von MediaCenter geladen. Dies erkennt man daran, dass der Test-Dialog erscheint.
Das Problem:
Beim Aufruf der HTML-Seite scheine ich keinen Zugriff auf die öffentlichen Methoden meiner Klasse zu haben, sprich auf die Methoden GetValue, GetStraightValue, SetValue, SetStraightValue, PlayingCheck und ErrorMessage1001.
Was mache ich falsch ? Habe ich in der HTML-Datei was falsch geschrieben ?
Wenn ich versuche, die .dll über regsvr32 im System zu registrieren, bekomme ich die Meldung, dass die Datei zwar geladen wurde, aber der DllRegisterServer-Eingangspunkt nicht gefunden wurde und die Datei deswegen nicht im System registriert werden kann. Im Internet habe ich allerdings gelesen, dass in C# programmierte Librarys garnicht über regsvr32 registriert werden müssen. Über RegisterMCEApp.exe funktioniert das Registrieren ja auch problemlos und das AddIn wird wie man am Dialog-Fenster erkennen kann ja auch erfolgreich in MediaCenter geladen und gestartet. Nur auf meine Methoden komme ich aus meiner HTML-Datei heraus nicht ran. Wieso ?
MfG
Leon
Das Problem:
Bearbeitet von Leon, 04 September 2005 - 05:32 .


Anmelden
Benutzerkonto erstellen


Nach oben





