【问题标题】:Using keySend with Windows Media Center将 keySend 与 Windows Media Center 一起使用
【发布时间】:2010-09-25 05:38:37
【问题描述】:

嘿,我正在使用 C# 尝试在 Windows 7 中向 Windows Media Center 发送按键命令。

目前我可以发送像 4 这样的键,然后在 windows 媒体中心看到数字 4。

问题是任何组合键,如 Ctrl+p(暂停电影)似乎对媒体中心没有任何影响。

任何帮助将不胜感激。这是我的代码 sn-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;
    }

【问题讨论】:

标签: c# windows-media-center


【解决方案1】:

我实际上无法通过 VK 类获得任何有用的东西。 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 上都可以正常工作。

【讨论】:

  • 非常酷,很抱歉您无法让 VK 类正常工作。可能是过去 2 年的 windows 媒体播放器更新打破了 VK 类。
【解决方案2】:

实际上我终于能够在这个网站上找到一个可行的解决方案:

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

我最终使用他的 VK Class 和 Remote Sender Class 方法来解决这个问题。 Windows 媒体中心必须具有较低级别的密钥挂钩,并且您必须实施 keyup/keydown 发送解决方案才能利用这些挂钩。

我终于可以暂停一部电影了!我将清理代码并稍后发布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多