Question

Hé, je suis en utilisant C # pour essayer d'envoyer des commandes clavier Windows Media Center dans Windows 7.

À l'heure actuelle, je peux envoyer des clés comme 4 et voir le numéro 4 apparaît sur les fenêtres media center.

Le problème est une combinaison de touches comme Ctrl + p (pour mettre en pause un film) ne semble pas avoir d'effets sur le centre des médias.

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;
    }
Était-ce utile?

La solution 2

J'étais réellement en mesure de trouver enfin une solution qui a travaillé sur ce site:

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

Je fini par utiliser ses méthodes VK classe et à distance Sender classe pour résoudre ce problème. media center Windows doit avoir un niveau inférieur crochets de clé et vous devez mettre en œuvre une solution d'envoyer keyup / keydown pour les crochets exploités.

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

Autres conseils

En fait, je n'a pas été en mesure de réaliser quoi que ce soit utile à la classe VK. MediaCenter ne répondrait pas à cette keydown / keyup choses.

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.
}

, SendKeys doit travailler ensuite. Je viens de enveloppai essayer autour / catch.

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top