[英]How to get readable classname and title from HWND handle? in WinApi c++
[英]C++ Winapi HWND Get element by Name
有什么办法可以通过属性“名称”获得HWND吗? 我知道每个IDE都有HWND元素自己的属性,但是这些属性都应用于HWND。
我不在Visual Studio中工作,这只是一个例子。 我想在没有VS库的C ++中按名称获取HWND。
例如:
HWND button = GetHwndByName("button1"); //Example
属性“名称”为button1
我假设您正在尝试通过代码或其他程序的GUI控件访问GUI控件。
正如某些人所提到的,属性编辑器中的(name)
属性只是用于该控件的变量名称。 屏幕快照显示了Visual Studio编辑.net程序。 对于.net, (name)
字段是表示控件的窗口类的类成员的名称。 因此,如果(name)
为button1
则Visual Studio可能会生成如下代码
// pseudo-C++/C#-like
class Form1 : public System.Windows.Forms.Form {
private:
System.Windows.Forms.Button *button1;
...
};
这里的想法是将事件处理程序作为Form1
类的一部分:
void Form1::onButton1Clicked(void)
{
this->button1->SetText("You clicked me!");
}
因此,从Windows的角度来看, (name)
不是窗口的固有属性。
我不知道CA Plex的GUI编辑器是什么样的,但是假设您说您正在使用C ++,我可以假设它要么
a)产生一个类似于我上面粘贴的类,在这种情况下,您将直接使用(name)
作为成员,或者
b)产生一个头文件,其中每个控件名称均作为全局HWND
变量
无论哪种方式,您都可以直接在代码中直接使用它们。 也许有类似的东西
void doToAllButtons(void (*f)(HWND, LPARAM), LPARAM lParam)
{
(*f)(button1, lParam);
(*f)(button2, lParam);
(*f)(button3, lParam);
}
并编写一个适当的函数以通过此函数进行调用。
如果您需要与另一个程序进行接口并希望使用其变量名,那么您就不走运了。 您需要以其他方式找到想要的窗口,例如使用FindWindow()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.