Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 17.11.2009, 02:18   #1
TRIZER
Студент
Пользователь
 
Аватар для TRIZER
 
Регистрация: 13.11.2009
Сообщений: 65
Восклицание Поиск Handle'a объекта типа "Edit" в окне стороннего приложения

Дано:
1) Вражеское окно
2) В нем два объекта типа "Edit"
3) Надпись на одном из них "000000", Надпись на втором не известна (может быть разной, длинна фиксированная - 7 символов)
4) Надпись на неизвестном Edit'e появляется через промежуток времени (от 1000мс до 5000мс)
Задача - считать текст с одного из Edit'ов (того, текст которого заранее не известен)
Пробовал так:
Код:
procedure TForm1.GetID;
var
h,h1:HWND; i:integer;
begin
h:=FindWindow(PChar(#32770),nil);
h1:=FindWindowEX(h,0,PChar('Edit'),'');
sleep(5000);
ID:=GetText(h1);
end;
(GetText-моя процедура, работает правильно - 100%)

Но текст считывается не с того Edit'a, который нужен.
Бьюсь головой об монитор вторые сутки, не знаю ... возможно есть API типа "FindNextWindowEx" ....
Буду благодарен любой помощи заранее спасибо.
TRIZER вне форума Ответить с цитированием
Старый 17.11.2009, 08:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
FindNextWindowEx
Ну вообще-то есть GetWindow с параметром GW_CHILD и после уже GW_HWNDNEXT
Но я рекомендую искать окна более надежно через EnumChildWindow и EnumWindow.
FindWindow(Ex) какая-то недоколыханная...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2009, 11:56   #3
TRIZER
Студент
Пользователь
 
Аватар для TRIZER
 
Регистрация: 13.11.2009
Сообщений: 65
По умолчанию

Спасибо огромное GetWindow помогло
TRIZER вне форума Ответить с цитированием
Старый 19.11.2009, 04:46   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

Код:
procedure TForm1.GetID;
var
h,h1:HWND; i:integer;
begin
h:=FindWindow(PChar(#32770),nil);
h1:=FindWindowEX(h,0,PChar('Edit'),'');
h1:=FindWindowEX(h,h1,PChar('Edit'),'');
sleep(5000);
ID:=GetText(h1);
end;
а еще можно так, коли он второй эдит.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.07.2012, 14:40   #5
pepesina
Пользователь
 
Регистрация: 12.07.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
procedure TForm1.GetID;
var
h,h1:HWND; i:integer;
begin
h:=FindWindow(PChar(#32770),nil);
h1:=FindWindowEX(h,0,PChar('Edit'),'');
h1:=FindWindowEX(h,h1,PChar('Edit'),'');
sleep(5000);
ID:=GetText(h1);
end;
а еще можно так, коли он второй эдит.
как мне сделать,что б считывалось два едита?помогите плиз
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 h:hwnd;
 s:array [0..255] of char;
begin
h:=findWindowex(FindWindow(nil,'TeamViewer'),0,'Edit',nil);
//Edit1.Text:= IntToStr(h);
Sendmessage(h,WM_GETTEXT,20,Integer(@s));
Edit1.Text:= String(s);
Showmessage(s);
end;
pepesina вне форума Ответить с цитированием
Старый 12.07.2012, 14:44   #6
pepesina
Пользователь
 
Регистрация: 12.07.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от TRIZER Посмотреть сообщение
Дано:
1) Вражеское окно
2) В нем два объекта типа "Edit"
3) Надпись на одном из них "000000", Надпись на втором не известна (может быть разной, длинна фиксированная - 7 символов)
4) Надпись на неизвестном Edit'e появляется через промежуток времени (от 1000мс до 5000мс)
Задача - считать текст с одного из Edit'ов (того, текст которого заранее не известен)
Пробовал так:
Код:
procedure TForm1.GetID;
var
h,h1:HWND; i:integer;
begin
h:=FindWindow(PChar(#32770),nil);
h1:=FindWindowEX(h,0,PChar('Edit'),'');
sleep(5000);
ID:=GetText(h1);
end;
(GetText-моя процедура, работает правильно - 100%)

Но текст считывается не с того Edit'a, который нужен.
Бьюсь головой об монитор вторые сутки, не знаю ... возможно есть API типа "FindNextWindowEx" ....
Буду благодарен любой помощи заранее спасибо.
Напишите, как вы это сделали?очень надо пожалуйста!
pepesina вне форума Ответить с цитированием
Старый 12.07.2012, 14:59   #7
pepesina
Пользователь
 
Регистрация: 12.07.2012
Сообщений: 15
По умолчанию

посдкажите как правильно сделать?
pepesina вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме от 7000 рублей в месяц



Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 11:04
Как написать "примочку" к программе стороннего производителя (TeamViewer)??? >>arty<< Помощь студентам 4 07.08.2009 13:32
Показать в окне "Мой компьютер" Comer_Jus Общие вопросы Delphi 3 27.09.2008 02:28
"Транспортная задача", "Поиск решения" Perroman Microsoft Office Excel 3 12.12.2007 17:12
На чем пишутся стратегии типа "Казаков" и "Эпохи империи" Tayfun Свободное общение 3 26.06.2007 19:27


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Скидки на курсы GeekBrains 40%, выбирайте программу для себя