在C#中获取gnuplot图的窗口句柄
本文关键字:窗口句柄 gnuplot 获取 | 更新日期: 2023-09-27 18:22:05
我正在C#Winforms中开发一个GUI项目,该项目需要使用gnuplot中的图表。这些图表必须是动态的,这样用户就可以通过点击图表来获取信息。这意味着我必须打开窗口,不能简单地在GUI中使用图表的图片。我已经完成了所有工作,但我希望能够控制gnuplot图表在屏幕上的显示位置,这样用户就不必手动移动它。我使用C#进程来运行gnuplot,我发现使用user32.dll函数MoveWindow可以让我移动进程的窗口,如果我有它的窗口句柄的话,但不幸的是,这些图不是进程本身,它们是通过从进程向gnuplot发送命令来创建的,所以我找不到图本身的窗口句柄。
我有没有办法获得这些图的窗口句柄,或者有人知道一种更容易的方法来选择gnuplot创建的图在sceen上的显示位置吗?
下面是一些示例代码,显示了我的过程是如何创建gnuplot图的
Process gnuPlot = new Process();
gnuPlot.StartInfo.FileName = programName;
gnuPlot.StartInfo.UseShellExecute = false;
gnuPlot.StartInfo.RedirectStandardInput = true;
gnuPlot.StartInfo.CreateNoWindow = true;
gnuPlot.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
gnuPlot.Start();
StreamWriter gnuPlotInput = gnuPlot.StandardInput;
gnuPlotInput.WriteLine("set pm3d map");
gnuPlotInput.Flush();
string graphFileName = "fileName" notitle";
gnuPlotInput.WriteLine(String.Format("splot {0}", graphFileName));
gnuPlotInput.Flush();
提前感谢
-Jake
以下是对我有效的方法,以防它在未来的中帮助任何人
IntPtr windowId = IntPtr.Zero;
while (windowId == IntPtr.Zero)//keeps trying to get the id until it has it
windowId = FindWindowByCaption(IntPtr.Zero, "Gnuplot (window id : 0)");
MoveWindow(windowId, 670, 100, 550, 400, true);//adjusts the location of the gnuplot window