2013-07-11 3 views
0

Я работаю над проектом GUI в C# Winforms, который требует использования графиков из gnuplot. Эти диаграммы должны быть в динамической форме, чтобы пользователь мог получить информацию, нажав на диаграмму. Это означает, что я должен открыть окно и не могу просто использовать изображение графика в графическом интерфейсе. У меня все работает, но я хочу иметь возможность контролировать, где на экране отображается диаграмма gnuplot, так что пользователю не нужно перемещать ее вручную. Я использую процессы C# для запуска gnuplot, и я обнаружил, что использование функции user32.dll MoveWindow позволило бы мне переместить окно процесса, если бы у меня был его дескриптор окна, но, к сожалению, графики не являются самим процессом, они создаются отправка команд в gnuplot из процесса, поэтому я не могу найти дескриптор окна самого графика.Получение дескриптора графа gnuplot в C#

Есть ли в любом случае, чтобы я мог получить дескриптор окна этих графиков, или кто-нибудь знает более простой способ выбора, где графы, созданные 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

+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 
Смежные вопросы