我试图通过控制台中的c#中的process.diagnostics
在新进程中运行mp3文件;然而,控制台做其他事情,所以我不想失去焦点。我环顾了论坛,最终我认为你需要使用两个属性才能做到这一点:
StartInfo.CreateNoWindow = true; // has to be set to true
info.WindowStyle = ProcessWindowStyle.Hidden; // or minimized.
尽管如此,当我尝试以下内容时:
ProcessStartInfo info = new ProcessStartInfo(@"path to mp3 file here");
info.CreateNoWindow = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(info);
我仍然失去焦点,一个带有mp3文件的Windows媒体播放器打开并从控制台获取焦点。
我做错了什么?
答案 0 :(得分:0)
问题是通过诊断创建进程不一致 - 它可能会也可能不会返回hProcess句柄,因此不会受到对进程的操作的影响,因为它可以使用现有进程进行操作 - 以及你得到的手柄毫无意义。
但是,这不是结束。我找到了一种更好的方法来处理从控制台播放文件。
System.Media.AudioPlayer
允许以非常一致,可预测的方式处理.wav文件。我用this useful tool转换了我的mp3,现在代码很简单:
public SoundPlayer playOpeningTheme()
{
SoundPlayer myPlayer = new SoundPlayer(@"Path here.wav");
myPlayer.PlayLooping();
return myPlayer;
}
之后使用soundplayer对象影响播放非常简单,例如:
SoundPlayer myPlayer = playOpeningTheme();
// do stuff while the music is playing
// and then easily, without all the process mess, you can simply:
myPlayer.Stop();
myPlayer.Dispose();
// and keep on from here (: