winforms 如何获取ToolStripItem对象的“Handle”?

eivnm1vs  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(85)

无窗口控件
上面写着这是不可能的,因为对象不是从Control继承的,而是属于ToolStrip,但我用Window Scanner检查了这样一个描述符的存在,并且可以控制对象。

hzbexzde

hzbexzde1#

ToolStripTextBox的问题已经解决:

IntPtr handle = tstb.Control.Handle;
igetnqfo

igetnqfo2#

如果你自己做一些桌面应用程序自动化(因为UIautomation设计得非常糟糕),你可以设计一个返回Control类的方法:

public virtual Control FindControlByName(string name)
    {

[...]
                if (control is ToolStrip)
                {
                    var toolStrip = control as ToolStrip;
                    for (int i=0; i<toolStrip.Items.Count; i++)
                    {
                        ToolStripItem currrentItem = toolStrip.Items[i];
                        ToolStripTextBox textBox = currrentItem as ToolStripTextBox;
                        if (textBox != null)
                        {
                            if (textBox.Name == name)
                            {
                                return textBox.Control;
                            }
                        }
                    }
                }
        }
        return null;
    }

如果你可以和TargetApp的开发者交谈,请他通过ToolStripTextBox更改ToolStripLabel。您将从ToolStripControlHost中受益:https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.toolstripcontrolhost?view=windowsdesktop-7.0
它也是一个ToolStripItem,但它公开了“自动化关键元素”:控件属性。
只需将ToolStripTextBox设置为只读,无边框,并设置宽度,就可以了!

相关问题