Использование keySend с Windows Media Center
Эй, я использую C#, чтобы попытаться отправить ключевые команды в Windows Media Center в Windows 7.
В настоящее время я могу отправить ключи, такие как 4, и посмотреть, как число 4 появляется на Windows Media Center.
Проблема в том, что любая комбинация клавиш, например 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 Class и Remote Sender Class для решения этой проблемы. Windows Media Center должен иметь перехватчики ключей более низкого уровня, и вы должны внедрить решение отправки keyup / keydown для использования перехватчиков.
Я могу наконец приостановить фильм! Я уберу код и выложу его позже.
На самом деле я не смог достичь чего-то полезного с Классом ВК. 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 должен работать. Я просто обернул его вокруг попытаться / поймать.
private void SendKey(string key)
{
activateMediaCenterForm();
try
{
SendKeys.SendWait(key);
}
catch (Exception e)
{
//Handle exception, if needed.
}
}
Сейчас SendKey("{ENTER}");
так же как SendKey("{RIGHT}");
и все остальные ключи прекрасно работают в Windows 7.