Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];

Вниз

Как получить 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
1-57811
Sergn
2002-04-06 19:34
2002.04.18
Фоновый рисунок в компоненте TCustomMemo.


1-57764
lipskiy
2002-04-03 21:34
2002.04.18
Когда правильно делать FreeAndNil, а когда просто Free?


1-57700
kull
2002-04-08 00:12
2002.04.18
Как перевести string в другой charset?


1-57806
LMelkih
2002-04-06 20:09
2002.04.18
Переход на D6


3-57618
veronika
2002-03-28 09:48
2002.04.18
Можно ли с помощью Update добиться того, чтобы записи из таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский