Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.05;
Скачать: CL | DM;

Вниз

Скопировать данные с помощью API функций   Найти похожие ветки 

 
Krozzz   (2009-02-17 20:41) [40]


> Есть серьезные сомнения, что таким образом Вы ее действительно
> решили. Без шуток. Не знаю всех условий Вашей реальной задачи,
>  но в общем случае GetWindowText проблему, обозначенную
> в сабже, не решает. Поэтому, не исключено, что Вам только
> кажется, что Вы ее и в самом деле решили - из-за недостаточного
> объема тестирования.<Цитата>
>  
>
>

В общем случае не решает, но мне достаточно один раз скопировать содержимое Edit и на этом остановиться (хотя при изменении содержимого того Edit"а в запущенной программе, данной функции уже не хватает).


 
Юрий Зотов ©   (2009-02-17 21:05) [41]

> Krozzz   (17.02.09 20:41) [40]

Похоже, Вы все же заблуждаетесь. Вот выдержки из описания GetWindowText:

If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string.

To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.


А ведь про WM_GETTEXT Вам сказали уже давно...


 
Krozzz   (2009-02-17 23:06) [42]


> Похоже, Вы все же заблуждаетесь.

Вот код. Работает так, как я описал в предыдущем посте.
procedure TForm1.Button1Click(Sender: TObject);
var wnd:hwnd;
       b:array [0..127] of char;
begin
wnd:=FindWindow("TFormN",nil);
wnd:=FindWindowEx(wnd,0,"TEdit",nil);
GetWindowtext(wnd,b,Sizeof(b));
Edit1.text:=b;
end;


С WM_GETTEXT работает при условии внесения изменений в программу-источник (что в моем случае нежелательно).


 
clickmaker ©   (2009-02-17 23:10) [43]

> [42] Krozzz   (17.02.09 23:06)

TFormN в другом процессе?


 
Krozzz   (2009-02-17 23:12) [44]

clickmaker

> TFormN в другом процессе?

Да


 
clickmaker ©   (2009-02-17 23:25) [45]

и при каких изменениях работает WM_GETTEXT?


 
Юрий Зотов ©   (2009-02-17 23:35) [46]

GetWindowtext(wnd, @b, Sizeof(b));

Адрес b, а не просто b. См. описание функции.

А насчет того, что работает только при каких-то там изменениях - здесь точно путаница. При правильном коде должно работать всегда.


 
Юрий Зотов ©   (2009-02-17 23:41) [47]

Причем, если верить справке (а с чего бы ей не верить?), то как раз GetWindowText не должно работать никогда (потому что "This function cannot retrieve the text of an edit control in another application"), а вот WM_GETTEXT - как раз всегда. И никакие изменения тут ни при чем.


 
Германн ©   (2009-02-18 01:07) [48]


> Krozzz   (17.02.09 16:17) [38]
>
...
> (кроме, разве что, Германн"а.
> Вы, кроме как критиковать ничего не умеете?..
>

Я много чего умею. Но умело скрываю свои умения! :)


> Юрий Зотов ©   (17.02.09 23:35) [46]
>
> GetWindowtext(wnd, @b, Sizeof(b));
>
> Адрес b, а не просто b.

А разве в случае статического массива "b:array [0..127] of char;"
это не одно и то же?


 
Krozzz   (2009-02-18 18:49) [49]


> Юрий Зотов and clickmaker

Извиняюсь, промахнулся. Изменения надо вносить с WM_COPYDATA.
Насчет WM_GETTEXT: программа не работала из-за внесения названия
компонента как 4го параметра в FindWindowEx.
Вот правильный код:
procedure TForm1.Button1Click(Sender: TObject);
var
wnd:hwnd;
b:array [0..127] of char;
begin
Edit1.text:="";
wnd:=FindWindow("TFormN",nil);
wnd:=FindWindowEx(wnd,0,"TEdit",nil);(* при FindWindowEx(wnd,0,"TEdit","Edit1") не работает *)
Sendmessage(wnd,wm_gettext,sizeof(b),Lparam(@b));
Edit1.text:=b;
end;



> Юрий Зотов
</I
> как раз GetWindowText не должно работать никогда

>
Код, приведенный в [42], лично у меня работает для символов латиница+цифры (для других не проверял).


 
Германн ©   (2009-02-19 00:37) [50]


> Насчет WM_GETTEXT: программа не работала из-за внесения
> названия
> компонента как 4го параметра в FindWindowEx.
>


>
> Это не на форумах надо спрашивать. Это надо изучать по книгам,
>  причём достаточно серьёзным. Если речь идёт про WinAPI
> функции, то нужно абсолютно точно понимать, что никаких
> "компонент" они не знали, не знают и знать не хотят. Они
> знают только "окна" (windows).

Извини, что опять "критикую", но...



Страницы: 1 2 вся ветка

Текущий архив: 2009.04.05;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.017 c
2-1235036092
Andrey K
2009-02-19 12:34
2009.04.05
Положить на форму рисунок, чтобы фон был прозрачным


2-1234453501
Oleg_teacher
2009-02-12 18:45
2009.04.05
Серийный номер мат. платы


11-1199030958
Efir
2007-12-30 19:09
2009.04.05
Библиотека KOLATL


2-1234283818
CodeMaster
2009-02-10 19:36
2009.04.05
Убрать кнопку минимизации


2-1234775951
Scot Storch
2009-02-16 12:19
2009.04.05
организация сортировки по нескольким полям