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

时间:2013-07-11 20:17:57

标签: c# winforms user-interface gnuplot window-handles

我正在使用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

1 个答案:

答案 0 :(得分:0)

以下是对我有用的事情,以防将来帮助任何人

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