嘿,我正在使用C#向windows7中的windows media center发送关键命令。
目前,我可以发送像4这样的密钥,并在windows媒体中心看到数字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;
}发布于 2010-09-26 03:15:29
实际上,我最终找到了一个在这个网站上有效的解决方案:
http://michbex.com/wordpress/?p=3
我最终使用他的VK类和Remote Sender类方法来解决这个问题。Windows media center必须具有较低级别的键挂钩,并且您必须实现一个keyup/keydown发送解决方案来利用这些挂钩。
我终于可以暂停一部电影了!我将清理代码并在稍后发布它。
发布于 2013-02-15 01:02:34
实际上,我无法使用VK类实现任何有用的东西。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应该可以工作了。我只是把它包装在try/catch上。
private void SendKey(string key)
{
activateMediaCenterForm();
try
{
SendKeys.SendWait(key);
}
catch (Exception e)
{
//Handle exception, if needed.
}
}现在,SendKey("{ENTER}");以及SendKey("{RIGHT}");和所有其他密钥在Windows7上都能正常工作。
https://stackoverflow.com/questions/3792642
复制相似问题