运行c#进程时如何不失去焦点?

时间:2015-07-26 11:16:20

标签: c# process diagnostics

我试图通过控制台中的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媒体播放器打开并从控制台获取焦点。

我做错了什么?

1 个答案:

答案 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 (: