Windows API获得HWND

时间:2011-03-20 07:54:46

标签: c# winapi api

我正在开发一个软件来插入另一个程序的丰富编辑中的一些文本,代码如下:

atlfe = FindWindowEx(wtlsplitterwindow, 0, "atl:0087d7a8" , null);

这只是一行:这很好用,问题在于程序号atl:0087d7a8的每个版本都发生了变化,所以我必须使用spy ++来获取新的并在代码中更改它。

问题是,有什么方法可以从代码中获取该数字吗?

顺便说一下,我正在使用C#,VS2010。

4 个答案:

答案 0 :(得分:1)

我建议您使用UI Automation而不是原始Windows API。您应该从UI间谍工具开始,以确定您的应用的UI层次结构,它将更有弹性来改变。

在SO上看到关于这个主题的一些文章:

Retrieve current URL from C# windows forms application

How to get the word under the cursor in Windows?

答案 1 :(得分:0)

因为我搞砸了一些这样的Windows API,已经有一段时间了。我认为这可能是有价值的。

http://msdn.microsoft.com/en-us/magazine/cc163617.aspx

答案 2 :(得分:0)

如果Title始终相同,请使用它而不是类名

atlfe = FindWindowEx(wtlsplitterwindow, 0, null, "Title");

有关MSDN的更多信息。

答案 3 :(得分:0)

显然,如果子窗口没有标题,并且每次你有一个方法,它的类名不同。

您首先必须使用EnumWindows或FindWindowEx找到此应用程序的顶级窗口,后者如果您可以通过类名和/或窗口标题识别它。

拥有顶级窗口后,您可以浏览孩子以找到您要查找的子窗口。据推测,您已经知道顶级窗口和您要定位的子窗口之间的关系。无论如何,Spy ++可以告诉你这个。