有没有办法通过win32api获取控件的名称? (C ++)
我在说C#中的属性是'Name',比如'frmMain'或'btnNext'。 有没有办法通过win32API检索这些数据?
我已经尝试了GetWindowInfo()和东西,但我认为我没有朝着正确的方向前进..
感谢
编辑:我正在使用EnumChildWindows()进行迭代,我得到了正确的HWND ..不确定我是否可以用它来打印它的名字..(im a c ++ / win32 absolute noob)
已添加7/10/09
顺便说一下,我发现这是运行win32应用程序的非常好的工具。 http://www.autoitscript.com/autoit3/
看看它看起来不错,看起来像是免费软件? :)
答案 0 :(得分:3)
控件的名称通常是控件的私有变量,不会暴露给win32。您可以尝试使用GetWindowText获取某些控件的标题或GetWindowLong来获取某些属性,但我不认为您可以获得大多数控件的名称。
答案 1 :(得分:1)
name属性是编译器添加的东西AFAIK。在内部,Win32不支持这样的命名。
在C / C ++中,使用IDC_ *值而不是额外的加值,即整数比较比字符串比较快得多。
编辑:顺便说一下,通过使用GetDlgItemInt(hDlgWnd,IDC_ *)获取控件的HWND,可以使用上面提到的IDC值来获取对话框的子控件。使用EnumWindows更容易....
答案 2 :(得分:1)
我严重怀疑这些信息是否在可执行代码中,我认为从c#编译器的角度来看,这些符号会减少为对象指针或窗口标识符值(上面提到的IDC_)。
在我选择创建隐藏的静态文本控件并在每个窗口上标识文本以向外部进程提供此命名窗口功能之前,遇到过这种类型的问题。不是很优雅,但当时解决了我的问题。