Текущий архив: 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.46 MB
Время: 0.004 c