Frage

Hey, ich bin mit C # zu versuchen, in Windows 7 Tastaturbefehle Windows Media Center zu senden.

Zur Zeit Tasten wie 4 und sehen Sie die Nummer 4 erscheint auf dem Windows Media Center.

senden kann ich

Das Problem ist, jede Tastenkombination wie Strg + p (einen Film zu pausieren) scheint keine Auswirkungen auf das Media-Center zu haben.

Jede Hilfe wäre sehr geschätzt. Hier ist mein Code-Schnipsel.

    // 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;
    }
War es hilfreich?

Lösung 2

Ich war tatsächlich in der Lage, um endlich eine Lösung zu finden, die auf dieser Website gearbeitet:

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

beenden ich mit seiner VK-Klasse und Remote-Sender Klassenmethoden auf dieses Problem zu lösen. Windows Media Center muss niedriger Ebene Schlüsselhaken haben und Sie müssen eine keyup / keydown Senden Lösung ausgebeutet den Haken implementieren.

ich kann endlich einen Film anhalten! Ich werde den Code aufzuräumen und per Post später.

Andere Tipps

Ich war eigentlich nicht in der Lage etwas nützlichen mit der VK-Klasse zu erreichen. Media Center würde nicht reagieren auf diese keydown / keyup Sachen.

Stattdessen habe ich diese Methode, um das Media-Center nach vorne zu bringen:

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

Danach sollten Tastaturbefehle funktionieren. Ich kann es nur rund gewickelten try / catch.

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

Jetzt sowie SendKey("{ENTER}"); SendKey("{RIGHT}"); und alle anderen Tasten funktioniert gut auf Windows 7.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top