Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с чужими приложениями. [D7, WinXP]


vanek_kg ©   (2005-10-18 08:09:00) 

Доброго всем времени суток.

Ситуация такая: в чухом приложении необходимо в поле ввода вставить текст, но это поле ввода только для чтения, поэтому SetText не работает.

Как перевести поле ввода в режим редактирования?

Заранее благодарен.


evvcom   (2005-10-19 16:16:00) [1]


> > можно ли где-то подглядеть, может он действительно хендл
>
> > неправильно определяет?
>
> Например, посмотреть на значение хэндла пропраммой Spy++
> (есть в комплекте MS Visual Studio).

А нафиг Spy, если с Дельфями идет WinSight32?


vanek_kg   (2005-10-18 10:07:00) [2]

Уже нашел!
Еще раз спасибо!


vanek_kg   (2005-10-18 10:00:00) [3]

UPS!!!
Незадача требует библиотеку SpyHk55.dll.


vanek_kg   (2005-10-18 09:56:00) [4]

Спасибо огромное и за помощь и за программу!


begin...end   (2005-10-18 09:55:00) [5]

> vanek_kg   (18.10.05 09:49) [15]

Отправил.

> А аськи случайно нет?

Нет.


vanek_kg   (2005-10-18 09:49:00) [6]


> Так сейчас вообще не находит? Может быть, edit этот не принадлежит
> окну с заголовком "Customisation-Tool V1.05"? В смысле,
> может быть, он на какой-нибудь панели лежит? Тогда надо
> сначала панель найти.


Возможно конечно...

Если не трудно выслать вот мой ящик: vanek1982@mail.ru

А аськи случайно нет?


begin...end   (2005-10-18 09:46:00) [7]

> vanek_kg   (18.10.05 09:33) [13]

Так сейчас вообще не находит? Может быть, edit этот не принадлежит окну с заголовком "Customisation-Tool V1.05"? В смысле, может быть, он на какой-нибудь панели лежит? Тогда надо сначала панель найти.

> vanek_kg   (18.10.05 09:20) [11]

Не могу. Могу выслать Spy++. 121 КБ.


vanek_kg   (2005-10-18 09:33:00) [8]


> Ёпрст! А где же присвоение значения переменной edt?!


Уфхцч...! Цикл то я убрал, а присвоение оставил!


 edt := FindWindowEx(wnd, 0, 'Edit', '');


А в [4] просто пропустил наверное, потому что писал по памяти!


begin...end   (2005-10-18 09:29:00) [9]

> vanek_kg   (18.10.05 09:19) [10]

Ёпрст! А где же присвоение значения переменной edt?!


vanek_kg   (2005-10-18 09:20:00) [10]


> Например, посмотреть на значение хэндла пропраммой Spy++
> (есть в комплекте MS Visual Studio).


А другого ничего не можете предложить?


vanek_kg   (2005-10-18 09:19:00) [11]

Не работает ни [5] ни [8].
Причем если избавиться от цикла, то он поле ввода не находит.


begin...end   (2005-10-18 09:11:00) [12]

> vanek_kg   (18.10.05 08:51) [6]

> можно ли где-то подглядеть, может он действительно хендл
> неправильно определяет?

Например, посмотреть на значение хэндла пропраммой Spy++ (есть в комплекте MS Visual Studio).


begin...end   (2005-10-18 09:05:00) [13]

> vanek_kg   (18.10.05 08:58) [7]

> Цикл.. потому что их там несколько!

И что? Т.к. в FindWindowEx не изменяется второй параметр, то на каждой итерации цикла будет находиться один и тот же edit. Цикл завершится после первого прохода (если edit есть), или не завершится вообще (если edit'а нет).

Всё-таки попробуйте [5], только лучше с каким-нибудь другим сообщением. Например, SendMessage(edt, EM_SETPASSWORDCHAR, Integer('*'), 0).


vanek_kg   (2005-10-18 08:58:00) [14]

Цикл.. потому что их там несколько!

(Если самому запустить программу, то в поле ввода нельзя ничего написать, вставить из буфера и  так далее. Но строка туда вставляется, после выбора файла из диалога "Открыть файл").


vanek_kg   (2005-10-18 08:51:00) [15]

Кстати сказать...
можно ли где-то подглядеть, может он действительно хендл неправильно определяет?


begin...end   (2005-10-18 08:48:00) [16]

> vanek_kg   (18.10.05 08:37) [4]

> while edt = 0

А зачем while?

> Хендл правильный с уверенностью на 70%.

Ну попробуйте ему другое сообщение послать, чтобы убедиться окончательно.

Например: SendMessage(edt, EM_SETSEL, 0, -1). Текст выделяется?


vanek_kg   (2005-10-18 08:37:00) [17]


 var wnd, edt: hWnd;
 strbase: string;
begin
wnd := FindWindow(nil, 'Customisation-Tool V1.05');
if wnd <> 0 then begin
  windows.SetForegroundWindow(wnd);
  while edt = 0 do FindWindowEx(wnd, 0, 'Edit', '');
  if edt <> 0 then begin
    strbase := 'c:\';  
    SendMessage(edt, WM_Settext, 0, Integer(StrBase));
  end
  else ShowMessage('Не нашел поле ввода!');
end
else ShowMessage('Окно не найдено!');
end;


Хендл правильный с уверенностью на 70%.


begin...end   (2005-10-18 08:27:00) [18]

> vanek_kg   (18.10.05 08:25) [2]
> Ну а можно узнать возможные причины почему текст не вставлется?

А как вставляете? Код можно увидеть?
Кстати, есть уверенность в том, что хендл правильный?


vanek_kg   (2005-10-18 08:25:00) [19]

Да, это Edit-контрол.
Ну а можно узнать возможные причины почему текст не вставлется?

ICQ: 247571693


begin...end   (2005-10-18 08:20:00) [20]

> vanek_kg   (18.10.05 08:09)

Речь идёт о edit-контроле?

Если не ошибаюсь, WM_SETTEXT должно работать независимо от наличия стиля ES_READONLY. Может быть, не работает по другой причине?

Ну а вообще edit переводится в режим редактирования посылкой EM_SETREADONLY с параметром wParam = Integer(False).


Наверх

Титульная страница Поиск, карта сайта Написать письмо