在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

在C#中获取gnuplot图的窗口句柄

以下是对我有效的方法,以防它在未来的中帮助任何人

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