Форум: "WinAPI";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизУправление чужим приложением Найти похожие ветки
← →
snake1977 (2004-11-24 10:14) [0]Здравствуйте!! подскажите пожалуйста. Я пытаюсь получить все элементы расположенные на форме чужого приложения, чтобы потом ими можно было управлять. Для этого делаю следующее
....
EnumChildWindows(FindWindow(0,"Delphi"), @EnumChildProc, Longint(ListBox2.Items));
....
function EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall;
var
szFull: array[0..255] of Char;
szClass: array[0..255] of Char;
begin
Result := Wnd <> 0;
if Result then
begin
GetWindowText(Wnd, szFull, SizeOf(szFull));
if (SL.IndexOfObject(TObject(Wnd)) < 0) then
Begin
GetClassName(wnd,szClass,SizeOf(szClass));
Sl.AddObject(Trim(StrPas(szFull))+"/"+Trim(StrPas(szClass)),TObject(Wnd));
end;
EnumChildWindows(Wnd, @EnumChildProc, Longint(SL));
end;
end;
в итоге получаю постой список :((
почему???
← →
Digitman © (2004-11-24 10:59) [1]что-то ты намудрил ...
var
hTopLevelWnd: THandle;
..
//ищем род.окно в предположении что оно top-level
hTopLevelWnd := FindWindow(0,"Delphi");
//если найдено
if hTopLevelWnd <> 0 then
//запускаем енумерацию его доч.окон
EnumChildWindows(hTopLevelWnd, @EnumChildProc, Longint(ListBox2.Items));
....
//ф-ция енумерации (при возврате всякий раз истины) будет вызвана столько раз,
//сколько реально существующих доч.окон у окна с хэндлом hTopLevelWnd
function EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall;
var
szFull: array[0..255] of Char;
szClass: array[0..255] of Char;
begin
//Wnd не может быть нулевым !
try
//получили нуль-терм. строку с именем окна (обрезка не требуется)
GetWindowText(Wnd, szFull, SizeOf(szFull));
//получили нуль-терм. строку с именем класса окна (обрезка так же не требуется)
GetClassName(wnd,szClass,SizeOf(szClass));
//добавили в стринг-лист полученную инф-цию
Sl.AddObject(StrPas(szFull))+"/"+StrPas(szClass),TObject(Wnd));
//вернули истину для продолжения енумерации
Result := True;
except
//возникло какое-то исключение - вернули ложь для прекращения енумерации
Result := False;
end;
end;
← →
Leonid Troyanovsky (2004-11-24 11:41) [2]
> snake1977 (24.11.04 10:14)
> Здравствуйте!! подскажите пожалуйста. Я пытаюсь получить
> все элементы расположенные на форме чужого приложения, чтобы
http://groups.google.com/groups?selm=3CC15216.450FBAA8%40eco-pro.ru
--
С уважением, LVT.
← →
snake1977 (2004-11-24 13:15) [3]Получилось!!!
оказвается функции
у GetWindow(Handle, gw_HWndFirst) по возвращаемому хендлу, функция GetWindowText возвращает Caption приложения
а ежели выбирать список окон через EnumWindows, то по возвращаемому хендлу, функция GetWindowText возвращает Сaption окна
во как!
← →
Digitman © (2004-11-24 13:20) [4]
> Caption приложения
у Win32-приложения нет никакого Caption.
Caption может быть у окна, но не у приложения.
"приложение" <> "окно"
← →
snake1977 (2004-11-24 13:23) [5]я имел ввиду что в одном случае возвращается
caption (назовите как хотите :) ) который написан на кнопочке на панели задач
а во втором случае заголовок окна :)
т.е. на панели задач висит кнопка на которой написано Delphi
а окошко реально называется Delphi 5 - Project1 [Running]
вот :)
почему так я честное слово не понял
← →
snake1977 (2004-11-24 13:27) [6]и еще вопрос если не сложно будет ответить
я посылаю кнопке сообщение
таким способом
h2 := FindWindowEx(wnd, 0, 0, "&Next >");
SendMessage(h2, BM_CLICK, 0, 0);
а как быть если у элемента окна нет заголовка
например это панель
или кнопка из toolbar ??
← →
Digitman © (2004-11-24 13:55) [7]
> который написан на кнопочке на панели задач
мало ли чего на этой кнопочке написано ..
тебе разве эта кнопочка нужна ? тебе нужно некое окно, в дан.случае имеющее заголовок "Delphi 5 - Project1 [Running]"
а эта самая кнопочка самостоятельного окна не имеет, не ищи ее.
> как быть если у элемента окна нет заголовка
мало того - "элемент" этот может и не иметь самостоятельного окна, поэтому что бы ни было написано на нем, окна ты не найдешь, ибо его просто нет - граф.изображение "элемента" попросту отрисовано на HDC того контрола, к которому "принадлежит" этот "элемент".
еще раз - не всякая "кнопка" является кнопкой в твоем понимании. т.е. не все что выглядит как "кнопка" имеет собственное окно.
← →
snake1977 (2004-11-24 14:20) [8]С окнами все понятно (главное что работает поиск нормально)
и на кнопочку нажимается. осталась одна проблемма
в окошке есть три EDIT ни у одного из них нет
строки возвращаемой GetWindowText, т.е. значение = ""
название класса у всех одинаково :(
как мне искать тогда функцией FindWindowEx ??
ведь у этих элементов нет названия а имя класса совпадает
← →
Digitman © (2004-11-24 14:26) [9]
> snake1977 (24.11.04 14:20) [8]
сначала определись, что ты ищешь.
ты же сам говоришь, что содержимое этих 3-х EDITов тебе заведомо неизвестно ...
так что же ты ищешь ? N-ный по счету (слева направо, к примеру, так как это выглядит сугубо визуально) EDIT ? или что ?
← →
snake1977 (2004-11-24 14:32) [10]>>Digitman
приложение представляет из себя визарда, где надо ввести
ФИО в соответсвующие EDIT и нажать на кнопочку NEXT
изначально эти три EDIT пусты, поэтому когда я строю список контролов то у меня получается список в котором есть тока имя класса
вот я хочу на автомате внести туда ФИО нажать на NEXT и т.д.
соответсвенно как мне внести Фамилию именно в тот EDIT куда надо.
просто методом тыка определить какой он по счету???
или как??
← →
Digitman © (2004-11-24 16:39) [11]
> приложение представляет из себя визарда, где надо ввести
> ФИО в соответсвующие EDIT и нажать на кнопочку NEXT
давай так - на основании чего ты убежден, что видимые тобой на экране этого Визарда контролы, якобы предст.собой СТАНДАРТНЫЕ контролы, именно таковыми и являются ? ты проводил некие исследования ? какими средсьтвами ? что они показали ?
← →
snake1977 (2004-11-24 16:56) [12]я сделал програмку, которая вызывает EnumWindows и заносит все найденное в список,
по выбранному из списка заголовку, я выбираю EnumChildWindows при выборе каждого я узнаю его GetWindowText и GetClassName и заполняю в список через строка/название_класса
вот таким макаром я узнал что там есть
/Edit
/Edit
/Edit
&Next >/Button
Finish/Button
.....
← →
Digitman © (2004-11-24 17:33) [13]ну да ладно ..
ну нахреначил ты в список ЭДИТов некую кучу целевых ЭДИТов ...
ну ОТ НАС-то что требуется ?!
все ж контролы, интересующие тебя,- налицо ... хэндлы оных ты поимел ...
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.034 c