Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

взять данные из окна ЧУЖЕГО приложения [D7, WinXP]


Страницы:   1 2 3

laronov ©   (2006-09-20 12:23:00) 

Есть программа, которая берет данные из закрытой базы (априори считается что извлекать данные из этой базы можно ТОЛЬКО при помощи этой программы)
Пишется другая, СВОЯ, программа, в которой необходимо брать данные, отображенные в полях типа Edit или ComboBox ЧУЖЕЙ программы.

Знаю точно, что это можно как-то сделать, вопрос именно как?

Заранее спасибо за ответы.


Наиль   (2006-09-21 10:36:00) [41]


>  [18] laronov   (21.09.06 10:21)

Выпишем строчки в которых встречается value;
value :string; // читать как value:='', а точнее value= nil;
SendMessage(edt,WM_GETTEXT,0, lparam(LPCTSTR(@value[1])))
// читать как SendMessage(edt,WM_GETTEXT,0, lparam(LPCTSTR(@ nil[1])))
result:=value; // Теперь это уже не важно

Даже если бы ты вместо LPCTSTR(@value[1]) написал правильное PChar(value).
Это всё равно не сработало бы, так как WM_GetText предполагает, что ты подготовил место в памяти для хранения полученых данных. Для этого в [1] есть GetMem(Value,255); что в твоём случае должно записыватся как SetLength(Value,255).


Elen   (2006-09-21 10:32:00) [42]


> laronov

Я ж говорю - сырой примерчик. Попробуй поменять разультат функции с variant на Pchar


laronov   (2006-09-21 10:21:00) [43]


> Наиль ©   (21.09.06 09:57) [15]
>
> >@value[1]
>
> Ужас!

в первом примере
result:=value;
не работает, делфи не дает возвращать pchar


laronov   (2006-09-21 10:20:00) [44]


> Не хило примерчик [1] перековеркали...

так он совсем не работал... :(

вместо того что бы критиковать, лучше бы посоветовали, где я ошибся...


Elen   (2006-09-21 10:10:00) [45]


> laronov

Не хило примерчик [1] перековеркали...


Наиль   (2006-09-21 09:57:00) [46]


>@value[1]

Ужас!


laronov   (2006-09-21 09:41:00) [47]


> До чего числа красивые.
> И с чего ты взял, что они верные на момент выполнения программы?
>


потому что я смотрю MS Spy++

я, правда, не понял зачем я передаю хендл самого окна, т.е. как его использовать...


Virgo_Style   (2006-09-21 09:39:00) [48]

laronov   (20.09.06 16:16) [7]
Прокомментируйте, пожалуйста, каждую строчку. Ну, например

if VarIsNumeric(Application) then wnd:=Application;
//Здесь я проверяю переменную типа Integer, не стала ли она случайно Variant'ом с нечисловым значением. Это сделано специально для того, чтобы получить warning о неинициализированном Wnd.

и так далее. Начиная с заголовка функции.


Наиль   (2006-09-21 09:31:00) [49]


> ($00AC0944, $007C0808);

До чего числа красивые.
И с чего ты взял, что они верные на момент выполнения программы?


laronov   (2006-09-21 09:26:00) [50]


> Куда вытащить?


> procedure TForm1.Button1Click(Sender: TObject);
> begin
>  edit1.Text:=SendStringToAnotherComponent($00AC0944, $007C0808);
>
> end;

в свой edit....


evvcom   (2006-09-21 08:26:00) [51]

> [9] laronov   (20.09.06 16:34)

Кудавытащить?


laronov   (2006-09-20 16:34:00) [52]


> SendMessage(edt,WM_GETTEXT,0, lparam(LPCTSTR(@value[1])))

ну а где у меня тут ошибка? беру хендл TEdit'а и при помощи SendMessage  пытаюсь вытащить значение из того эдита...


Сергей М.   (2006-09-20 16:20:00) [53]


> ничего не получается... возвращается пустая строка


потому что "образ и подобие" - откровеннейшая галиматья, в которой ты даже не удосужился разобраться, где-что-как-почему там происходит


laronov   (2006-09-20 16:16:00) [54]

сдела по образу и подобию http://64.233.161.104/search?q=cache:W8AUNsPg_QwJ:www.delphirus.com.ru/modules.php%3Fname%3DPages%26pa%3Dshowpage%26pid%3D1463+SendMessage+WindowHandle+WM_GETTEXT&hl=ru&ct=clnk&cd=1


function SendStringToAnotherComponent(Application, Element:integer):string;
var
Wnd : HWND;
edt : HWND;
p:pchar;
value :string;
begin
edt:=0;
if VarIsNumeric(Application) then wnd:=Application;
//Wnd :=FindWindow(nil, p);
if wnd0 then edt:=Element;
if edt0 then
  SendMessage(edt,WM_GETTEXT,0, lparam(LPCTSTR(@value[1])))
  else MessageDlg('hendl = 0', mtInformation,
     [mbOk], 0);

result:=value;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 edit1.Text:=SendStringToAnotherComponent($00AC0944, $007C0808);
end;



но в итоге ничего не получается... возвращается пустая строка...


Весь в делах   (2006-09-20 14:42:00) [55]

http://www.google.ru/search?as_q=%D0%BF%D1%80%D0%BE%D0%B3%D1%83%D0%BB%D0%BA%D0%B0+%D0%BF%D0%BE+%D0%BE%D0%BA%D0%BD%D0%B0%D0%BC&as_sitesearch=http%3A%2F%2Fwww.delphikingdom.com


laronov   (2006-09-20 14:14:00) [56]


> В королевстве есть несколько замечательных статей. Топай
> и читай.

вопрос как искать? т.е. как это все сформулировать так, что бы в поиск засунуть...
Сам когда-то давно видел на королевстве


Весь в делах   (2006-09-20 13:34:00) [57]


> laronov

В королевстве есть несколько замечательных статей. Топай и читай.


Elen   (2006-09-20 13:21:00) [58]


> laronov

Spy++ тебе в помощь


laronov   (2006-09-20 12:57:00) [59]


> Application - капшн или Хендл того приложения
> NameElement - Имя элемента на форме
> ClassElement - Его класс


а как узнать (особенно имя элемента) их и в каком  формате пишется класс....


Elen   (2006-09-20 12:47:00) [60]

Попробуй так : код сыроват, так что пусть мастера его посмотрят

Application - капшн или Хендл того приложения
NameElement - Имя элемента на форме
ClassElement - Его класс

  function SendStringToAnotherComponent(Application:variant;NameElement,ClassElement):varia nt;

var        // Copy Rights by Default from Delphi Master Site
Wnd : HWND;
edt : HWND;value,p:pchar;
begin
edt:=0;
GetMem(value,255);
if VarIsStr(Application) then p:=pchar(VarToStr(Application));
   Wnd :=FindWindow(nil, p);  // íàõîäèì îêíî
if VarIsNumeric(Application) then wnd:=Application;
if wnd0 then edt:= FindWindowEx(Wnd,0,pchar(ClassElement),pchar(NameElement));
if edt0 then  
   SendMessage(edt,WM_GETTEXT,0, lparam(LPCTSTR(value)));
result:=value;
end;
//**************************************************************************


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо