Как получить структуру чужого окна

  • Автор темы SaNn
  • Дата начала
S

SaNn

#1
Вообщем, есть чужое окно, HWND известен, нужно добраться до определённого элемента
(например Edit) , НО в программе понатыкано панелей и из-за этого, с поиском возникают проблемы...
Помогите плиз...
PS: Пишите код пожалуста...
 
S

SaNn

#3
Для: gamecreator

Сам додумался или кто подсказал???

Я сам знаю что нужно найти HWND объекта, но найти его не просто, потому что объект находиться на панели, панель на ещё одной панели, эта панель на панели, ..... ну а эта панель на форме. И ещё проблема в том, что это возможно не панель вовсе (я проверял найдёт ли прога объект класса TPanel, так не нашла не одной).

Вот почему я хочу узнать как узнать структуру объекта на форме.
 
T
#4
Тебе надо не ТПанель искать, а Окна (незнаю как у Борланда, а у М$ это класс CWnd) и проверять свойства этих окон (кнопка это или едит, или панель)

Попробуй это:
BOOL EnumChildWindows(
HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);

hWndParent
[in] Handle to the parent window whose child windows are to be enumerated. If this parameter is NULL, this function is equivalent to EnumWindows.

lpEnumFunc
[in] Pointer to an application-defined callback function. For more information, see EnumChildProc.

lParam
[in] Specifies an application-defined value to be passed to the callback function.
 
04.09.2006
2 566
3
#5
Для: SaNn
Ты там свой Spy решил написать? В общем случае придется рекурсивно вызывать EnumChildWindows, про которую тебе уже сказал tdr
 
S

SaNn

#6
Для: European

Ты там свой Spy решил написать?
Это не Spy, а типа вспомогательной программы, для ещё одной программы.
В общем для нубов. Друг попросил написать. Согласился только из-за то, что проект интересный.

И ещё, можно немного по подробней рассказать про EnumChildWindow (Как его использовать, инфу я в инете найду).
 
G

gamecreator

#7
найти его не просто, потому что объект находиться на панели, панель на ещё одной панели, эта панель на панели, ..... ну а эта панель на форме. И ещё проблема в том, что это возможно не панель вовсе (я проверял найдёт ли прога объект класса TPanel, так не нашла не одной).
попробуй Spy++ (утилита VC++)
 
T
#8
Для: SaNn
Да какие уж тут подробности...
Все в МСДН есть. Создается три окна. При изменении размера главного окна перечислябтся дочерние окна и к ним применяется функция EnumChildProc
Код:
#define ID_FIRSTCHILD 100 
#define ID_SECONDCHILD 101 
#define ID_THIRDCHILD 102 

LONG APIENTRY MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
RECT rcClient; 
int i; 

switch(uMsg) 
{ 
case WM_CREATE: // creating main window 

// Create three invisible child windows. 

for (i = 0; i < 3; i++) 
{ 
CreateWindowEx(0, 
"ChildWClass", 
(LPCTSTR) NULL, 
WS_CHILD | WS_BORDER, 
0,0,0,0, 
hwnd, 
(HMENU) (int) (ID_FIRSTCHILD + i), 
hinst, 
NULL); 
}

return 0; 

case WM_SIZE:  // main window changed size 

// Get the dimensions of the main window's client 
// area, and enumerate the child windows. Pass the 
// dimensions to the child windows during enumeration. 

GetClientRect(hwnd, &rcClient); 
EnumChildWindows(hwnd, EnumChildProc, (LPARAM) &rcClient); 
return 0; 

// Process other messages. 
} 
return DefWindowProc(hwnd, uMsg, wParam, lParam); 
} 

BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam) 
{ 
LPRECT rcParent; 
int i, idChild; 

// Retrieve the child-window identifier. Use it to set the 
// position of the child window. 

idChild = GetWindowLong(hwndChild, GWL_ID); 

if (idChild == ID_FIRSTCHILD) 
i = 0; 
else if (idChild == ID_SECONDCHILD) 
i = 1; 
else 
i = 2; 

// Size and position the child window. 

rcParent = (LPRECT) lParam; 
MoveWindow(hwndChild, 
(rcParent->right / 3) * i, 
0, 
rcParent->right / 3, 
rcParent->bottom, 
TRUE); 

// Make sure the child window is visible. 

ShowWindow(hwndChild, SW_SHOW); 

return TRUE;
}
 
04.09.2006
2 566
3
#9
<!--QuoteBegin-gamecreator+5:02:2008, 19:46 -->
<span class="vbquote">(gamecreator @ 5:02:2008, 19:46 )</span><!--QuoteEBegin-->попробуй Spy++ (утилита VC++)
[snapback]96763" rel="nofollow" target="_blank[/snapback]​
[/quote]
А причем тут SPY?