Вызов собственного контекстного меню для "IP address control"
Могу посоветовать функции GetWindow и GetWindowEx и еще вот эту штуку Borland\Delphi7\Bin\WS32.EXE
Хм, а у меня получилось, только почему-то в обратном порядке:
begin
IpEdit := CreateWindow('SysIPAddress32',
nil,
WS_VISIBLE or WS_CHILD,
5, 5, 135, 25,
handle,
0,
HInstance,
nil);
edit1 := GetWindow(IpEdit, GW_CHILD);
edit2 := GetWindow(edit1, GW_HWNDNEXT);
edit3 := GetWindow(edit2, GW_HWNDNEXT);
edit4 := GetWindow(edit3, GW_HWNDNEXT);
SetWindowText(edit1, 'd');
SetWindowText(edit2, 'c');
SetWindowText(edit3, 'b');
SetWindowText(edit4, 'a');
Почитав и про функцию EnumChildWindows(), я понял почему получал только один HWND вместо четырех: возвращаемым значением моей функции, в которую по очереди передаются хэндлы дочерних окон, я сделал 0. А в описании EnumChildWindows() сказано:
В общем, поменял возвращаемое значение с 0 на TRUE и получил четыре вызова своей функции с четырьмя хэндлами в обратном порядке - для 4-го, 3-го, 2-го и 1-го октетов. Кстати, если послать сообщение IPM_GETADDRESS, то в DWORD'е, адрес которого указывпется в параметре lParam посылаемого сообщения, IP адрес будет записан также в обратном порядке: 1-ый октет в битах 24-31, 2-ой - в битах 16-23, 3-ий - в битах 8-15, и 4-ый - в битах 0-7. Возможно, это как-то связано с тем, что в вычислительной технике используется порядок байтов Little Endian, а в сетях - Big Endian.