C# FindWindowByCaption函数查找不带';还不存在

C# FindWindowByCaption函数查找不带';还不存在,c#,gnuplot,dllimport,user32,findwindow,C#,Gnuplot,Dllimport,User32,Findwindow,我正在编写一个C#应用程序,它需要将gnuplot图移动到用户屏幕上的特定位置。为此,我使用DllImport将几个函数引入到我的程序中。特别是FindWindowByCaption和MoveWindow等。到目前为止,这对我来说效果很好,但突然之间,图表停止了移动 我发现生成图形需要更长的时间,它会在创建窗口之前尝试执行MoveWindow函数,这样窗口就不会实际移动。我不知道为什么现在这是一个问题,因为它在早期版本的代码中是好的 出于某种原因,FindWindowByCaption函数在窗口

我正在编写一个C#应用程序,它需要将gnuplot图移动到用户屏幕上的特定位置。为此,我使用DllImport将几个函数引入到我的程序中。特别是FindWindowByCaption和MoveWindow等。到目前为止,这对我来说效果很好,但突然之间,图表停止了移动

我发现生成图形需要更长的时间,它会在创建窗口之前尝试执行MoveWindow函数,这样窗口就不会实际移动。我不知道为什么现在这是一个问题,因为它在早期版本的代码中是好的

出于某种原因,FindWindowByCaption函数在窗口实际存在之前找到窗口句柄

我有一个循环中的find window函数,它应该尝试执行,直到找到正确的句柄。每个图形的名称都会更改

IntPtr windowId = IntPtr.Zero;
        while (windowId == IntPtr.Zero)//keeps trying to get the id until it has it
            windowId = FindWindowByCaption(IntPtr.Zero, "p " + polyValue + " s " + (dataLocation + 1));
出于某种原因,它在实际创建gnuplot图之前找到了该图的句柄,然后它试图过早地运行MoveWindow函数,因此当实际生成该图时,它不会到达正确的位置

任何建议都会有帮助

谢谢


-Jake

奇怪的是,当窗口能够通过其标题进行查找时,它应该有自己的
有效句柄。而且您的
windowId
应该正是所需的
句柄
。我可以使用Thread.Sleep()在一定时间内进行移动,但这只是临时修复。我需要找到一种方法来识别gnuplot窗口何时实际出现在屏幕上,这样我就可以移动它了。@JakeGearhart,我想,这已经有点晚了,但是试着看一下怎么样?我想我刚才解决了这个问题,或者找到了一种不同的方法来做我想做的事情。谢谢你。