While acquiring the handle to a UserForm will yield an unambiguous result, this can not always be said for the child controls.
Spy++ only finds two child windows.
Obviously, a container holds all child controls, preventing 'FindWindow' or EnumChildWindow' from receiving meaningful results.
In order to still acquire a handle to the control, use following trick:
- activate the control with 'SetFocus'
- get the handle using the Api function 'GetFocus'
But: The handles for all buttons are identical. The same applies to Option Box and Check Box handles.
Results:
Control Type | Result |
Label | Ambiguous |
TextBox | Ambiguous |
ComboBox | Ambiguous |
ListBox | Unique |
CheckBox | Ambiguous |
OptionButton | Ambiguous |
ToggleButton | Ambiguous |
Frame | Unique |
CommandButton | Ambiguous |
TabStrip | Ambiguous |
MultiPage | Unique |
ScrollBar | Ambiguous |
SpinButton | Ambiguous |
Image | Ambiguous |
TreeView | Unique |
ProgressBar | Unique |
In other words: The Api can only be used with following VBA-Controls:
- ListBox
- Frame
- MultiPage
- TreeView
- ProgressBar
Please note: The controls handle will change with every call to SetFocus/GetFocus.