3

Windows 7 の Windows Media Center にキー コマンドを送信するために C# を使用しています。

現在、4 のようなキーを送信すると、Windows Media Center に 4 という数字が表示されます。

問題は、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;
    }
4

2 に答える 2

1

私は実際、VK クラスで役に立つことは何も達成できませんでした。MediaCenter は、このキーダウン/キーアップに応答しません。

代わりに、この方法を使用して、メディア センターを前面に表示しました。

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

これで、Windows 7 で他のすべてのキーとSendKey("{ENTER}");同様に問題なく動作するようになりました。SendKey("{RIGHT}");

于 2013-02-14T17:02:34.497 に答える
0

私は実際にこのウェブサイトで機能する解決策を最終的に見つけることができました:

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

私はこの問題を解決するために彼のVKクラスとリモート送信者クラスのメソッドを使用することになりました。Windows Media Centerには、より低いレベルのキーフックが必要であり、フックを利用するには、キーアップ/キーダウン送信ソリューションを実装する必要があります。

いよいよ映画を一時停止できます!コードをクリーンアップして後で投稿します。

于 2010-09-25T19:15:29.053 に答える