Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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,792
По умолчанию

Цитата:
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,000
По умолчанию

Код:
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, 15: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, 15: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, 15:59   #7
pepesina
Пользователь
 
Регистрация: 12.07.2012
Сообщений: 15
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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