【问题标题】:Getting window handle of a gnuplot graph in C#在 C# 中获取 gnuplot 图的窗口句柄
【发布时间】:2013-07-11 20:17:57
【问题描述】:

我正在使用 C# Winforms 开发一个 GUI 项目,该项目需要使用 gnuplot 中的图表。这些图表必须是动态的形式,以便用户可以通过点击图表来获取信息。这意味着我必须打开窗口并且不能简单地在 GUI 中使用图表的图片。我一切正常,但我希望能够控制 gnuplot 图表在屏幕上的显示位置,以便用户不必手动移动它。我正在使用 C# 进程运行 gnuplot,我发现使用 user32.dll 函数 MoveWindow 可以让我移动一个进程的窗口,如果我有它的窗口句柄,但不幸的是,这些图不是进程本身,它们是由从进程向 gnuplot 发送命令,所以我找不到图形本身的窗口句柄。

我有没有办法获得这些图表的窗口句柄,或者有人知道更简单的方法来选择 gnuplot 创建的图表在屏幕上的显示位置吗?

这里是一些示例代码,展示了我的过程是如何创建 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();

提前致谢,

-杰克

【问题讨论】:

  • 其实我只是通过按窗口名称搜索进程找到句柄来解决的。我稍后会发布代码,以防以后对任何人有帮助。

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


【解决方案1】:

这对我有用,以防将来对任何人有所帮助

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    相关资源
    最近更新 更多