Форум: "WinAPI";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизКак послать текст определённому Edit в чужой программе? Найти похожие ветки
← →
Lexa1900 (2002-11-01 20:38) [0]Посылая в 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"у ?
Спасибо.
← →
Viktor Kushnir (2002-11-02 08:53) [1]Я делал так:
Text :String;
...
SendMessage(VWnd1,WM_SETTEXT,0,Longint(PChar(Text)));
← →
Lexa1900 (2002-11-02 12:59) [2]Спасибо, за облегчение передачи, но как всё-таки передать конкретному Edit"y ?
← →
Arcus (2002-11-02 13:47) [3]> ...как всё-таки передать конкретному Edit"y ?
Надо знать handle конкретного Edit"а. Найти его проще, если известен его ControlID. Иначе придется перебирать все дочерние окна и проверять - не оно ли.
← →
Lexa1900 (2002-11-02 14:21) [4]А что это за ContolID? Как их можно узнать?
← →
Arcus (2002-11-02 16:50) [5]В общем-то у каждого приличного контрола есть свой ID...
В чужом окне его можно узнать либо через что-то типа WinSight,
либо через функциюGetWindowLong(Handle, GWL_ID)
(но там нужен искомый хэндл :) ). Иначе придется перебирать все дочерние окна черезEnumChildWindows
← →
Lexa1900 (2002-11-02 17:03) [6]А можно ли узнать handle компонента (кнопки или edit"a), когда щёлкаешь по нему (или вводишь текст) в другой программе?
← →
Arcus (2002-11-02 17:51) [7]Поскольку пора домой, то
см. ниже процедуру, которая извлекает текст из специфического контрола с неизвестным 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 20:10) [8]А что дают эти строки, что они значут?
lParam:= GetWindowLong(Wnd, GWL_STYLE);
if (lparam and SS_ICON) <> 0 then
Exit;
GetWindowText(Wnd, Buf, Length(Buf));
← →
Ihor Osov'yak (2002-11-02 21:29) [9]2 Lexa1900 (02.11.02 17:03) возьми spy++ от vs, там это делается за четыре щелчка мышью.
← →
Viktor Kushnir (2002-11-03 09:07) [10]В принципе WinSight32, в Дельфи тоже самое делает.
← →
Arcus (2002-11-04 11:31) [11]to Lexa1900
Говорят же люди, что через WinSight32 это проще сделать...
>А что дают эти строки, что они значут?
Это выделение нужного МНЕ контрола из числа прочих. ВАМ нужен некий едитбокс.
GetClassName
возвращает ClassName. Если это не "Edit", то сразу отбрасываем.
Если в диалоге один едитбокс, то все - он найден.GetWindowLong(Handle, GWL_ID)
- дает его ID.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c