Usando keySend con Windows Media Center
-
05-10-2019 - |
Pregunta
Hola, estoy usando C # para intentar enviar comandos de teclado para Windows Media Center en Windows 7.
Actualmente me puede enviar claves como 4 y ver el número 4 aparece en el centro de medios de Windows.
El problema es cualquier combinación de teclas como Ctrl + P (para pausar una película) no parece tener ningún efecto sobre el centro de medios.
Cualquier ayuda sería muy apreciada. Aquí está mi fragmento de código.
// 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;
}
Solución 2
Yo era realmente capaz de encontrar finalmente una solución que funcionó en este sitio web:
http://michbex.com/wordpress/?p=3
Terminé usando su clase VK y métodos de clase remitente remoto para resolver este problema. centro de medios de Windows debe tener ganchos clave de nivel inferior y se debe implementar una solución keyup / keydown enviar a los ganchos explotadas.
Por fin puedo hacer una pausa en una película! Voy a limpiar el código y que lo ponga más tarde.
Otros consejos
En realidad no fue capaz de lograr nada útil con la Clase VK. MediaCenter haría no responde a este keydown / keyup cosas.
En su lugar he usado este método para llevar el centro de medios a frente:
[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.
}
A continuación, SendKeys debería funcionar. Yo sólo lo envolvió alrededor de try / catch.
private void SendKey(string key)
{
activateMediaCenterForm();
try
{
SendKeys.SendWait(key);
}
catch (Exception e)
{
//Handle exception, if needed.
}
}
Ahora SendKey("{ENTER}");
, así como SendKey("{RIGHT}");
y todas las demás teclas funciona bien en Windows 7.