![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как послать текст определённому Edit в чужой программе? [D4, Win95/98]
Lexa1900 © (2002-11-01 20:38:00)Посылая в Edit другой программы текст я делаю следующее:
var h:hwnd;
begin
h:=FindWindow(nil,"<Кэпшн формы>");
if h<>0 then
h:=FindWindowEX(h,0,"TEdit",nil);
if h<>0 then
SendMessage(h,wm_paste ,0,0);
end;
А как послать текст определённому Edit"у ?
Спасибо.
Arcus (2002-11-04 11:31:00) [1]to Lexa1900
Говорят же люди, что через WinSight32 это проще сделать...
>А что дают эти строки, что они значут?
Это выделение нужного МНЕ контрола из числа прочих. ВАМ нужен некий едитбокс.
GetClassNameвозвращает ClassName. Если это не "Edit", то сразу отбрасываем.
Если в диалоге один едитбокс, то все - он найден.GetWindowLong(Handle, GWL_ID)- дает его ID.
Viktor Kushnir (2002-11-03 09:07:00) [2]В принципе WinSight32, в Дельфи тоже самое делает.
Ihor Osov'yak (2002-11-02 21:29:00) [3]2 Lexa1900 (02.11.02 17:03) возьми spy++ от vs, там это делается за четыре щелчка мышью.
Lexa1900 (2002-11-02 20:10:00) [4]А что дают эти строки, что они значут?
lParam:= GetWindowLong(Wnd, GWL_STYLE);
if (lparam and SS_ICON) <> 0 then
Exit;
GetWindowText(Wnd, Buf, Length(Buf));
Arcus (2002-11-02 17:51:00) [5]Поскольку пора домой, то
см. ниже процедуру, которая извлекает текст из специфического контрола с неизвестным ID путем перебора всех контролов в диалоге и определением искомого контрола по стилю (варианты - по размеру;по местоположению; по тексту). Wnd - хэндл диалога.
var Wnd: HWND;
lParam: Longint
function EnumChildProc(Wnd: HWND; lParam: Longint): BOOL; stdcall;
var Buf: array[0..255] of char;
begin
...
if (GetClassName(Wnd, Buf, Length(Buf)) = 0) or (Buf <> "Static") then Exit;//соотв. проверяй на нужный класс (едит или кнопку)
//выделение искомого контрола среди других
lParam:= GetWindowLong(Wnd, GWL_STYLE);
if (lparam and SS_ICON) <> 0 then Exit;
//
GetWindowText(Wnd, Buf, Length(Buf));
...
end;
begin
...
EnumChildWindows(Wnd, @EnumChildProc, lParam);
...
end;
Lexa1900 (2002-11-02 17:03:00) [6]А можно ли узнать handle компонента (кнопки или edit"a), когда щёлкаешь по нему (или вводишь текст) в другой программе?
Arcus (2002-11-02 16:50:00) [7]В общем-то у каждого приличного контрола есть свой ID...
В чужом окне его можно узнать либо через что-то типа WinSight,
либо через функциюGetWindowLong(Handle, GWL_ID)(но там нужен искомый хэндл :) ). Иначе придется перебирать все дочерние окна черезEnumChildWindows
Lexa1900 (2002-11-02 14:21:00) [8]А что это за ContolID? Как их можно узнать?
Arcus (2002-11-02 13:47:00) [9]> ...как всё-таки передать конкретному Edit"y ?
Надо знать handle конкретного Edit"а. Найти его проще, если известен его ControlID. Иначе придется перебирать все дочерние окна и проверять - не оно ли.
Lexa1900 (2002-11-02 12:59:00) [10]Спасибо, за облегчение передачи, но как всё-таки передать конкретному Edit"y ?
Viktor Kushnir (2002-11-02 08:53:00) [11]Я делал так:
Text :String;
...
SendMessage(VWnd1,WM_SETTEXT,0,Longint(PChar(Text)));