Windows Media CenterでKeySendを使用します
-
05-10-2019 - |
質問
ねえ、C#を使用して、Windows 7のWindows Media Centerにキーコマンドを送信しようとしています。
現在、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;
}
解決 2
私は実際にこのウェブサイトで働いたソリューションを最終的に見つけることができました:
http://michbex.com/wordpress/?p=3
この問題を解決するために、彼のVKクラスとリモート送信者クラスのメソッドを使用しました。 Windows Media Centerには低レベルのキーフックが必要であり、キーアップ/キーダウン送信ソリューションを実装してフックを悪用する必要があります。
ついに映画を一時停止することができます!コードをクリーンアップして後で投稿します。
他のヒント
私は実際に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は機能するはずです。私はちょうどそれを試して/キャッチに包みました。
private void SendKey(string key)
{
activateMediaCenterForm();
try
{
SendKeys.SendWait(key);
}
catch (Exception e)
{
//Handle exception, if needed.
}
}
今 SendKey("{ENTER}");
と同様 SendKey("{RIGHT}");
また、他のすべてのキーはWindows 7で正常に機能します。
所属していません StackOverflow