![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как изменить содержимое Edita чужой программы [D7, WinXP]
carmen © (2005-05-27 22:51:00)Имеет чужая программа. Мне нужно в поле ввода вводить автоматом свои значения. Я пробую делать так:
Var Hnd,HndDialog,HndControl,HndAsc,HndBtn :HWnd;
StrClass :PChar;
StrBase :string;
begin
Hnd:=FindWindow(nil, 'Parametrs'); // Работает
if Hnd <>0 then
begin
windows.SetForegroundWindow(Hnd); // Устанавливаю фокус
HndControl:=0;
// Здесь у меня всегда возвращает 0, где моя ошибка
HndControl:=FindWindowEx(Hnd,0,nil,pchar('123')); // В поле ввода первоначально стоит значение 123
if HndControl<>0 then
begin
StrBase:='1234';
Sleep(1000);
SendMessage(HndControl, WM_Settext,0,Integer(StrBase));
SendMessage(HndDialog,WM_Command,MakeWParam (1,$0f),HndControl);
End;
End;
У меня получается найти Hnd, а вот найти HndControl не получается, всегда возвращается значение 0.
Як правильно надо делать.
carmen (2005-05-27 23:49:00) [21]Да Вы правы, поле ввода находилос не на самой форме на GroupBox.
Теперь следующий вопрос как нажать на кнопку класса TBitBtn которая находится на этой же форме (на самой форме, родитель класс TForm).
Marser (2005-05-27 23:39:00) [22]
> carmen © (27.05.05 23:30) [7] [Новое
>сообщение][Ответить]
> Чужая программа тоже написана на Delphi и используется
> класс TEdit. Выще приведение замечания тоже не работают
Кнопка расположена непосредственно на форме? Или на панели etc ? Тогда нужно определить и дескриптор этой самой панели, ибо она и будет родительским коном для поля ввода.
alex-drob (2005-05-27 23:35:00) [23]
> carmen © (27.05.05 23:30) [7]
В комплекте Delphi 7 есть WinSight32. Можно запустить её, найти там нужную программу и посмотреть класс.
alex-drob (2005-05-27 23:32:00) [24]
> Marser © (27.05.05 23:24) [6]
> Пробовать не нужно, нужно брать WinSpect
Нужно брать не мне, а тому кто задавал вопрос. Я же не знаю что у него за чужая программа. Я просто предложил вариант.
carmen (2005-05-27 23:30:00) [25]Чужая программа тоже написана на Delphi и используется класс TEdit. Выще приведение замечания тоже не работают
Marser (2005-05-27 23:24:00) [26]
> alex-drob (27.05.05 23:18) [5]
Пробовать не нужно, нужно брать WinSpect или подобные вещи и узнавать класс контрола. Я перед предыдущим сообщением так и сделал и вновь убдеился, что-таки "TEdit". Но вариантов много, поэтому очень не советую лезть вслепую и предполагать.
alex-drob (2005-05-27 23:18:00) [27]Я согласен со всем, но если
> HndControl:=FindWindowEx(Hnd,0,'Edit',nil)
не работает, то можно попробывать TEdit
Marser (2005-05-27 23:16:00) [28]
> alex-drob (27.05.05 23:12) [3] [Новое
>сообщение][Ответить]
> HndControl:=FindWindowEx(Hnd,0,pchar('TEdit'),nil)
Если делфийный, то да, но системный класс имено "Edit". И приведение к Pchar делать необязательно.
alex-drob (2005-05-27 23:12:00) [29]HndControl:=FindWindowEx(Hnd,0,pchar(' TEdit'),nil)
carmen (2005-05-27 23:06:00) [30]Так тоже не работает
Marser (2005-05-27 23:02:00) [31]
> HndControl:=FindWindowEx(Hnd,0,nil,pchar('123')); // В
> поле ввода первоначально стоит значение
Попробуй так:
HndControl:=FindWindowEx(Hnd,0,'Edit',nil)