有没有办法可以通过它的属性“名称”获得HWND?我知道每个IDE都有自己的HWND元素属性,但这些属性应用于HWND。
我不是在Visual Studio中工作,这只是一个案例。我希望在没有VS库的情况下通过C ++中的Name获取HWND。
例如:
HWND button = GetHwndByName("button1"); //Example
属性“名称”是 button1
答案 0 :(得分:0)
我将假设您要么尝试访问代码中的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()
。