2010-09-25 4 views
3

Hey, je suis en utilisant C# pour essayer d'envoyer des commandes clavier Windows Media Center dans Windows 7.Utilisation de keySend avec Windows Media Center

Actuellement je peux envoyer des clés comme 4 et voir le numéro 4 apparaît sur les fenêtres médias centre.

Le problème est toute combinaison de touches comme Ctrl + p (pour mettre en pause un film) ne semble pas avoir d'effets sur le media center.

Toute aide serait grandement appréciée. Voici mon extrait de code.

// Get a handle to an application window. 
    [DllImport("USER32.DLL", CharSet = CharSet.Unicode)] 
    public static extern IntPtr FindWindow(string lpClassName, 
    string lpWindowName); 

    // Activate an application window. 
    [DllImport("USER32.DLL")] 
    public static extern bool SetForegroundWindow(IntPtr hWnd); 


    String HandleClass = "eHome Render Window"; 
    String HandleWindow = "Windows Media Center"; 

    private bool SendKeyCommand() 
    { 
     bool success = true; 
     IntPtr PrgHandle = FindWindow(HandleClass, HandleWindow); 
     if (PrgHandle == IntPtr.Zero) 
     { 
      MessageBox.Show(HandleWindow + " is not running"); 
      return false; 
     } 
     SetForegroundWindow(PrgHandle); 
     SendKeys.SendWait("^p"); 
     return success; 
    } 
+0

Je sais qu'il est hors de propos, mais je l'ai remarqué la méthode et extern ce qu'elle représente. – Tarik

+0

Le modificateur extern signifie que la méthode est implémentée en dehors du code C#. http://msdn.microsoft.com/en-us/library/e59b22c5%28VS.80%29.aspx – Scott

Répondre

0

que je fait enfin pu trouver une solution qui a travaillé sur ce site:

http://michbex.com/wordpress/?p=3

Je fini par utiliser ses méthodes de classe VK et classe Sender à distance pour résoudre ce problème. Windows Media Center doit avoir des hooks de clé de niveau inférieur et vous devez implémenter une solution d'envoi de keyup/keydown pour exploiter les hooks.

Je peux enfin mettre en pause un film! Je vais nettoyer le code et l'afficher plus tard.

1

En fait, je n'ai pas été en mesure de réaliser quelque chose d'utile avec la classe VK. MediaCenter ne répondrait pas à ce genre de problème.

Au lieu de cela, j'utilisé cette méthode pour amener le centre des médias à l'avant:

[DllImport("user32.dll")] 
static extern bool SetForegroundWindow(IntPtr hWnd); 

public static void activateMediaCenterForm() 
{ 
    System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName("ehshell"); 
    if (p.Length > 0) //found 
    { 
     SetForegroundWindow(p[0].MainWindowHandle); 
    } 
    //else not Found -> Do nothing. 
} 

Ensuite, SendKeys devrait fonctionner. Je l'ai juste emballé autour d'essayer/attraper.

private void SendKey(string key) 
{ 
    activateMediaCenterForm(); 
    try 
    { 
     SendKeys.SendWait(key); 
    } 
    catch (Exception e) 
    { 
     //Handle exception, if needed. 
    } 
} 

maintenant SendKey("{ENTER}"); ainsi que SendKey("{RIGHT}"); et toutes les autres clés fonctionne très bien sur Windows 7.

+0

Très cool, désolé que vous n'ayez pas réussi à faire fonctionner la classe VK. Il se peut que les mises à jour de Windows Media Player au cours des 2 dernières années aient cassé la classe VK. – Scott

Questions connexes