Главная страница
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.023 c
4-1207825025
Виталий
2008-04-10 14:57
2009.04.05
Узнать хендлы открытых процессом файлов


1-1209046362
Михаил
2008-04-24 18:12
2009.04.05
Как поместить картинку в диаграмму Excel ?


2-1235058508
AlexeyMir
2009-02-19 18:48
2009.04.05
Как ОТОБРАЗИТЬ Lookup-поле в DBGrid`e


15-1233650411
AlexKniga
2009-02-03 11:40
2009.04.05
А где "С днем рождения !" ?


15-1233817444
Slider007
2009-02-05 10:04
2009.04.05
С днем рождения ! 3 февраля 2009 вторник