![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с чужими приложениями. [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).