Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.18;
Скачать: CL | DM;

Вниз

Как получить handle s элементов другой программы?   Найти похожие ветки 

 
Romul ©   (2002-02-14 16:36) [0]

Получаю handle одной своей проги из другой посредством FindWindow, дальше для получения handl"ов всяких кнопок, эдитов и т.д. надо применить FindWindowEx, но не знаю как. Как эти самые хендлы получить и желательно знать кокой хендл какому элементу соответствует.


 
Fellomena   (2002-02-14 17:06) [1]

Как сам правильно сказал - использовать надо FindWindowEx + знать класс того окна (кнопка тоже окно), которое ты хочешь найти.
Пример:

FindWindowEx(FindWindow("Shell_TrayWnd", nil),0,"Button", nil);

Получили дескриптор кнопки Пуск.
Т.е. в FindWindowEx первым параметром окно-родитель, третьим класс того окна, который ты хочешь найти. Ну а когда handle узнаешь, то определить то это окно или не то, что тебе нужно - не сложно.


 
Romul ©   (2002-02-14 17:16) [2]

Т.е. если я укажу "Button" или "Edit" то это будет корректно и будет означать класс окон? А как, например, c DateTimePicker"ом быть?
И как по хендлу определить какой кнопке или Edit"у он пренадлежит? Если можно поподробнее.


 
Fellomena   (2002-02-14 17:39) [3]

Почитай об оконных классах в Win9x - в SDK есть их названия.

>> И как по хендлу определить какой кнопке или Edit"у он пренадлежит?

Зная дескриптор окна, ты можешь с помощью API ф-ий узнать об этом окне всё. Caption, размер абсолютный, размер относительный, стиль, родителя, и т.д.
И при том ты сам должен знать что ты ищешь - кнопку или Edit - от этого зависит имя класса, которое ты указываешь в FindWindowEx.
8)

Короче, читни SDK или просто посмотри какие данные по окнам выдаёт Spy++ или (как же та прога называется, что вместе с Delphi и Builder-ом поставляется - для просмотра запущенных проессов ?).

Если ничего не получится - будем бороться :)


 
Romul ©   (2002-02-14 18:02) [4]

WinSight наверное? Ладно, посмотрю. Но если что я этот вопрос еще подниму :) Уж больно интересная тема. Да и другим наверное интересно будет.


 
Romul ©   (2002-02-15 10:56) [5]

Все получилось, только небольшая проблема осталась КАК ПОЛУЧИТЬ ХЕНДЛЫ ВСЕХ, ДОПУСТИМ, ЭДИТОВ (EDIT1, EDIT2,...), ЕСЛИ ОНИ ПУСТЫЕ? Т.е. если мы делаем так FindWindowEx(Hndl, 0, "TEdit", nil); то получим первый попавшийся хендл эдита. Т.е. получается, что если у эдитов в данный момент нет заголовков, то если хоть сто раз написать данный код, то все равно получим одно и тоже, как быть?


 
Вячеслав ©   (2002-02-15 12:05) [6]

Находишь главное окно, затем EnumChildWindows-все дочерние, затем дочерние у дочерних и так далее. Посмотри в MSDN, там все есть на эту тему. А примеры можно взять на Королевстве Делфи, статья называется как-то типа "Мечта вуайериста".
P.S. Так и называется, я не шучу :)


 
Romul ©   (2002-02-15 13:40) [7]

Ok, буду смотреть статью.


 
[NIKEL] ©   (2002-02-15 16:47) [8]

попробуйте вот так...

char buf[65535];
//вот так ты можешь получить handle первого дочернего окна
hwd = GetWindow(здесь Handle окна у которого ты ищешь чилды,GW_HWNDFIRST|GW_CHILD);
while (hwd != 0) // Крутим цикл, пока есть дочерние окна
{
GetClassName(hwd,&buf,255);//получаешь имя класса
if((buf[0] == "E") && (buf[3] == "t"))//это Edit ?
{
... чё нить делаем с этим handle`ом
}
hwd = GetWindow(hwd,GW_HWNDNEXT); // следующее дочернее окно
}


и не надо париться :)



Страницы: 1 вся ветка

Текущий архив: 2002.04.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
1-57751
andr
2002-04-05 14:20
2002.04.18
Очень простой вопрос.


14-57885
Nazya
2002-03-11 20:14
2002.04.18
Мастера да помогите уже на конец ! ПЛЗ


14-57858
Ru@beN
2002-03-11 16:22
2002.04.18
винда ХР ?????? Тоже интересно ...


14-57839
Delirium
2002-03-08 14:37
2002.04.18
Pentium 4


1-57703
B_A_V
2002-04-08 10:29
2002.04.18
select c выборкой по последней дате, которая < введенной даты