Использование ключа с Windows Media Center
-
05-10-2019 - |
Вопрос
Эй, я использую C #, чтобы попытаться отправить ключевые команды в Windows Media Center в Windows 7.
В настоящее время я могу отправлять ключи, такие как 4, и посмотреть номер 4 в центре Windows Media.
Проблема в любой ключевой комбинации, такой как 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 должен иметь ключевые крючки нижнего уровня, и вы должны реализовать решение Keyup / KeyWorndown для эксплуатации крючков.
Я могу наконец приостановить фильм! Я уставлю код и опубликую это позже.
Другие советы
Я на самом деле не смог добиться ничего полезного с классом 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.