LM Remote KeyMap vous permet d'utiliser du code C# pour étendre ses fonctionnalités. Le moteur de scripts C# donne accès à tout le .Net Framework ainsi qu'aux API natives Win32. Le moteur de scripts C# permet aussi d'utiliser les actions de LM Remote KeyMap depuis votre script à l'aide du LM Remote KeyMap object model.
Les scripts peuvent être utilisés aussi bien pour l'appui sur un bouton de la télécommande que pour les événements; le moteur de scripts C# n'est disponible que dans la version donateurs de LM Remote KeyMap.
Attention: Les scripts permettent un accès total à votre ordinateur. Les scripts sont normalement éxécutés avec les privilèges du LM Remote KeyMap desktop listener: c'est à dire sous Windows Vista / 7 sous le contrôle de l'UAC. Cependant comme les scripts peuvent utiliser les actions de LM Remote KeyMap; ils peuvent, avec l'action "Démarrer Application", éxécuter un process avec un privilège d'administrateur. En conséquence un script peut télécharger du code malveillant depuis internet et le faire tourner avec des privilèges administrateurs. Vous devez donc activer le support des scripts uniquement si vous en avez besoins et seulement pour quelques profils (Méfiez vous toujours des scripts contenus dans les profils que vous pouvez télécharger depuis la base de données en ligne)
Créer un script
Pour créer un script, sélectionnez l'action "Script". LM Remote KeyMap ouvre l'éditeur de script avec un squelette de script prêt à l'emploi.
using System;
using System.Diagnostics;
using LMGestion.RemoteKeyMap.ObjectModel;public class Script : IRKMScript
{
//This is the main script function : return true to
//stop executing more actions after your script
public bool Execute(ref ActionChainContext currentContext)
{
currentContext.remoteKeyMap.WriteTrace(TraceLevel.Info,"Script Start");
//Write your code here
currentContext.remoteKeyMap.WriteTrace(TraceLevel.Info,"Script End");
return false;
}
}
Quelques explications :
- using LMGestion.RemoteKeyMap.ObjectModel : c'est le namespace contenant tous les objets et définitions dont vous aurez besoin pour interfacer votre script avec LM Remote KeyMap. Un assemby LMGestion.RemoteKeyMap.ObjectModel.dll est disponible (ainsi que le XML de documentation LMGestion.RemoteKeyMap.ObjectModel.XML) pour que vous puissiez éditer vos scripts avec l'éditeur C# de votre choix et ainsi bénéficier de l'autocomplétion de cet éditeur (aucune autocomplétion n'est disponible dans l'éditeur de scripts de LM RKM)
- public class Script : IRKMScript : C'est la classe principale de votre script. Cette classe (ici nommée 'Script' doit implémenter l'interface IRKMScript)
- public bool Execute(ref ActionChainContext currentContext) : c'est le point d'entrée de votre script. Cette fonction est un membre de l'interface IRKMScript, vous devez donc l'implémenter. Cette fonction doit retourner "false" si vous souhaitez que les actions qui suivent votre script soient éxécutées, "true" sinon.
Object Model
Vous pouvez consulter la documentation complète du LM Remote KeyMap Object Model, cependant voici les objets les plus importants à connaître.
ActionChainContext
ActionChainContext est un type contenant des champs décrivant la chaîne d'actions courante. La chaîne d'action est une suite d'action que LM Remote KeyMap éxécute pour un événement ou un appui sur un bouton de télécommande.
Quand LM Remote KeyMap éxécute une action il passe toujour un ActionChainContext de manière à ce que les actions puissent échanger des informations basiques.
Par exemple l'ActionChainContext contient un pointeur vers l'objet principal LM Remote KeyMap, un pointeur vers la fenêtre actuellement au premier plan, les actions en cours d'éxécution, le bouton de la télécommande qui a généré la chaîne, etc...
Vous aurez souvent à passer un ActionChainContext pour utiliser des actions de LM Remote KeyMap, la majorité du temps vous allez devoir créer un nouveau contexte dérivé de celui que vous avez reçu gâce à la méthode Copy d'un ActionChainContext.
IRKMObject
L'interface IRKMObject est un pointeur vers l'objet principal LM Remote KeyMap. Vous allez utiliser ce pointeur pour créer des actions LM Remote KeyMap à l'aide de la méthode CreateAction. Ce pointeur donne aussi accès au context global de LM Remote KeyMap à travers un pointeur vers l'interface IContext : Le contexte global est similaire au contexte ActionChainContext: ActionChainContext est le contexte pour les actions en cours, tandis que le contexte global s'applique à LM Remote KeyMap dans son ensemble. Vous pouvez ainsi stockez / récupérez des variables globales à travers l'indexer de l'interface IContext.
Exemples de Scripts
Utilisation de l'OSD de LM RKM
using System;
using System.Diagnostics;
using LMGestion.RemoteKeyMap.ObjectModel;
public class Script : IRKMScript
{
public bool Execute(ref ActionChainContext currentContext)
{
currentContext.remoteKeyMap.WriteTrace(TraceLevel.Info,"Script Start");
//Get a LM Remote KeyMap Action
IAction action = currentContext.remoteKeyMap.CreateAction(ActionType.ShowOsd);
//Set up the action
((IShowOSDAction)action).Text = "Hello World !";
//Execute the action
action.Execute(ref currentContext);
currentContext.remoteKeyMap.WriteTrace(TraceLevel.Info,"Script End");
return false;
}
}
Utilisation de l'action "Envoi IR Direct"
using System;
using System.Diagnostics;
using LMGestion.RemoteKeyMap.ObjectModel;
public class Script : IRKMScript
{
//This is the main script function : return true to
//stop executing more actions after your script
public bool Execute(ref ActionChainContext currentContext)
{
currentContext.remoteKeyMap.WriteTrace(TraceLevel.Info,"Script Start");
IAction action = currentContext.remoteKeyMap.CreateAction(ActionType.BlastRaw);
((IBlastRawAction)action).DeviceID = "b5ab697b6eb74b45aeab4e024db9b176";
((IBlastRawAction)action).IRCode = "0000 006D 0022 0002 0156 00AC 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0016 0015 0016 0015 0041 0015 0041 0015 0041 0015 0016 0015 0016 0015 0041 0015 0041 0015 0041 0015 0041 0015 0016 0015 0041 0015 0016 0015 0016 0015 0041 0015 0016 0015 0016 0015 0016 0015 0041 0015 0016 0015 0041 0015 0041 0015 0016 0015 0041 0015 0041 0015 0041 0015 05F5 0156 0056 0015 0E47";
action.Execute(ref currentContext);
currentContext.remoteKeyMap.WriteTrace(TraceLevel.Info,"Script End");
return false;
}
}
Utilisation de l'action "Afficher Menu"
using System;
using System.Diagnostics;
using LMGestion.RemoteKeyMap.ObjectModel;
public class Script : IRKMScript
{
//This is the main script function : return true to
//stop executing more actions after your script
public bool Execute(ref ActionChainContext currentContext)
{
currentContext.remoteKeyMap.WriteTrace(System.Diagnostics.TraceLevel.Info, "Script Start");
//Create a menu action
IAction action = currentContext.remoteKeyMap.CreateAction(ActionType.DisplayMenu);
//Set up the action
ActionChainContext newContext = new ActionChainContext();
newContext.Copy(currentContext);
//Create the menu action
LMGestion.RemoteKeyMap.ObjectModel.Action menuAction = ((IDisplayMenuAction)action).ToAction();
menuAction.menuEntries = new Menu[3];
menuAction.menuEntries[0].name = "Menu Entry 1";
//Assign actions to the menu entry
menuAction.menuEntries[0].menuActions = new LMGestion.RemoteKeyMap.ObjectModel.Action[1];
IAction volumeAction = currentContext.remoteKeyMap.CreateAction(ActionType.VolumeMute);
menuAction.menuEntries[0].menuActions[0] = ((IVolumeMuteAction)volumeAction).ToAction();
menuAction.menuEntries[1].name = "Menu Entry 2";
menuAction.menuEntries[2].name = "Menu Entry 3";
//Pass the menu action into the new context
newContext.currentActions = new LMGestion.RemoteKeyMap.ObjectModel.Action[1];
newContext.currentActions[0] = menuAction;
//Execute the menu
action.Execute(ref newContext);
currentContext.remoteKeyMap.WriteTrace(System.Diagnostics.TraceLevel.Info, "Script End");
return false;
}
}

