Pregunta

Hola, estoy usando C # para intentar enviar comandos de teclado para Windows Media Center en Windows 7.

Actualmente me puede enviar claves como 4 y ver el número 4 aparece en el centro de medios de Windows.

El problema es cualquier combinación de teclas como Ctrl + P (para pausar una película) no parece tener ningún efecto sobre el centro de medios.

Cualquier ayuda sería muy apreciada. Aquí está mi fragmento de código.

    // 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;
    }
¿Fue útil?

Solución 2

Yo era realmente capaz de encontrar finalmente una solución que funcionó en este sitio web:

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

Terminé usando su clase VK y métodos de clase remitente remoto para resolver este problema. centro de medios de Windows debe tener ganchos clave de nivel inferior y se debe implementar una solución keyup / keydown enviar a los ganchos explotadas.

Por fin puedo hacer una pausa en una película! Voy a limpiar el código y que lo ponga más tarde.

Otros consejos

En realidad no fue capaz de lograr nada útil con la Clase VK. MediaCenter haría no responde a este keydown / keyup cosas.

En su lugar he usado este método para llevar el centro de medios a frente:

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

A continuación, SendKeys debería funcionar. Yo sólo lo envolvió alrededor de try / catch.

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

Ahora SendKey("{ENTER}");, así como SendKey("{RIGHT}"); y todas las demás teclas funciona bien en Windows 7.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top