Использование keySend с Windows Media Center - PullRequest
3 голосов
/ 25 сентября 2010

Эй, я использую C #, чтобы попытаться отправить ключевые команды в Windows Media Center в Windows 7.

В настоящее время я могу отправлять такие ключи, как 4, и видеть, что число 4 отображается в медиацентре Windows.

Проблема в том, что любая комбинация клавиш, например Ctrl + p (для приостановки фильма), похоже, не влияет на медиацентр.

Любая помощь будет принята с благодарностью. Вот мой фрагмент кода.

    // 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;
    }

Ответы [ 2 ]

1 голос
/ 14 февраля 2013

На самом деле я не смог достичь чего-то полезного с классом ВКонтакте.MediaCenter не будет отвечать на эту информацию о keydown / keyup.

Вместо этого я использовал этот метод, чтобы вывести медиацентр на передний план:

[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 должен работать.Я только что обернул его вокруг try / catch.

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

Теперь SendKey("{ENTER}");, а также SendKey("{RIGHT}"); и все остальные ключи прекрасно работают в Windows 7.

0 голосов
/ 25 сентября 2010

Я действительно смог наконец найти решение, которое работало на этом сайте:

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

Я решил использовать его методы VK Class и Remote Sender Class для решения этой проблемы. Windows Media Center должен иметь перехватчики ключей более низкого уровня, и вы должны внедрить решение отправки keyup / keydown для использования перехватчиков.

Я могу наконец приостановить фильм! Я уберу код и выложу его позже.

...