アプリケーションでffmpegを使用していますが、ビデオを完全に開始して録画しますが、停止したい場合は「q」を押すように要求するため、アプリケーションから実行中のプロセスに「q」を渡すにはどうすればよいですか。
質問する
4677 次
4 に答える
0
string process = //...process name
Process p = Process.GetProcessesByName(process).FirstOrDefault();
if( p != null)
{
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("q");
}
于 2013-10-28T19:23:32.743 に答える
0
以下のセットアップは、プロセスを終了するために機能しています。この例では、3 秒後にトリガーしていますが、「q」をいつでもプロセスに非同期で渡すことができます。それ以外の場合は、レコードを特定の時間に設定する方が理にかなっています。
string outputFile = "output.mp4";
if(File.Exists(outputFile))
{
File.Delete(outputFile);
}
string arguments = "-f dshow -i video=\"screen-capture-recorder\" -video_size 1920x1080 -vcodec libx264 -pix_fmt yuv420p -preset ultrafast " + outputFile;
//run the process
Process proc = new Process();
proc.StartInfo.FileName = "ffmpeg.exe";
proc.StartInfo.Arguments = arguments;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardInput = true;
proc.ErrorDataReceived += build_ErrorDataReceived;
proc.OutputDataReceived += build_OutDataReceived;
proc.EnableRaisingEvents = true;
proc.Start();
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
await Task.Delay(3000);
StreamWriter inputWriter = proc.StandardInput;
inputWriter.WriteLine("q");
proc.WaitForExit();
proc.Close();
inputWriter.Close();
于 2016-06-14T19:03:08.430 に答える
0
次のコードを使用します。
[System.Runtime.InteropServices.DllImport("User32.dll", EntryPoint = "PostMessageA")]
private static extern bool PostMessage(IntPtr hWnd, uint msg, int wParam, int lParam);
int Key_Q = 81;
PostMessage(hWnd, 0x100, Key_Q, 0);
于 2014-09-22T03:44:15.217 に答える