Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-51801
Zipper
2002-12-05 11:01
2002.12.16
Как определить координаты каретки


1-51735
Danlicha
2002-12-06 00:11
2002.12.16
Фурье преобразование


3-51612
PeregudSergey
2002-11-28 04:06
2002.12.16
TADOStoredProcedure error


1-51812
Юра
2002-12-05 11:33
2002.12.16
Параллельные действия и TTimer


3-51571
Брат
2002-11-26 16:43
2002.12.16
Как отловить исключительную ситуацию, которая возникает, когда я





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский