A NumericUpDown
имеет 2 дескриптора / элемента управления: внешний spinbox и внутренний элемент управления, похожий на текстовое поле редактирования.
Мне нужно получить дескриптор внутреннего элемента управления textbox.NumericUpDown.Handle
дает внешнюю ручку.
Самое близкое, что я нашел в Google к этому, - это этот форумный разговор .Хитрость заключается в том, чтобы использовать сообщение UDM_GETBUDDY = WM_USER+106 = 0x0400+106
, которое возвращает дескриптор окна собеседника, в нашем случае это текстовое редактирование.
Сначала вывод был примерно таким:
control.Capture = true;
IntPtr outer = User32.GetCapture();
IntPtr inner = new IntPtr(User32.SendMessage(outer, (0x0400 + 106), 0, 0));
Но затем ОП сказал, что это не работает, поэтому кто-то предложил использовать GetWindow(outer, GW_CHILD)
.где GW_CHILD = 5
control.Capture = true;
IntPtr outer = User32.GetCapture();
IntPtr inner = User32.GetWindow(outer, 5);
Для обоих этих методов я всегда получаю inner = 0
, что, очевидно, не является правильным ответом.Тем не менее, описанный OP метод 2, похоже, сработал, поэтому я могу что-то делать не так.
Кстати, механизм «захвата» кажется бесполезным, поскольку я могу просто использовать:
IntPtr outer = control.Handle;
Который возвращает то же самое.
Итак, есть идеи, как получить дескриптор внутреннего текстового поля?