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

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

api


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

Жаннка ©   (2006-04-24 13:24:00) 

ку,вопросик по api

var
 h: HWND;
 gg:pchar;
begin
h := findwindow('TWINDOWSCMD','Text Windows Commander 5.0 - Any One');
getwindowtext(h,gg,50);
edit2.Text:=gg;

почему то выводит полный бред в эдит:S‹Ш‹Ги\x1E7\x2

как быть?


Eraser   (2006-04-24 18:22:00) [41]


> Жаннка   (24.04.06 18:08) [29]

Жанна, ну третий раз повторяю, что не будетработать getwindowtext для edit'ов в чужомпроцессе...


sniknik   (2006-04-24 18:14:00) [42]

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

p.s. рано за winapi  взялся...


sniknik   (2006-04-24 18:10:00) [43]

> строка лабела пуста
проверь хендлы (по F7 к примеру) какоето окно не находится... (хендл = 0)


Жаннка   (2006-04-24 18:08:00) [44]

var
Hndl: THandle;
h:hwnd;
st: string;
begin
SetLength(st, 255);
h:=FindWindow('xz',nil);
Hndl:= FindWindowEx(h, 0, 'Edit',nil);
getwindowtext(Hndl, PChar(st), 255);
Label7.Caption:= st;
строка лабела пуста


Eraser   (2006-04-24 18:00:00) [45]


> Жаннка   (24.04.06 17:50) [26]
>
>
> > если это просто эдит на той же форме, то... (причем первый
>
> > эдит в "чилдах")
>
> в другом приложении несколько эдитов,я пытаюсь вытащить
> из них текст

[27] + самостоятельно отсылаешь WM_GETTEXT в нужный edit.


sniknik   (2006-04-24 17:55:00) [46]

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


Жаннка   (2006-04-24 17:50:00) [47]


> если это просто эдит на той же форме, то... (причем первый
> эдит в "чилдах")

в другом приложении несколько эдитов,я пытаюсь вытащить из них текст


KygECHuK   (2006-04-24 17:39:00) [48]

попробуй послать едиту сообщение WM_GETTEXT самостоятельно


sniknik   (2006-04-24 17:37:00) [49]

> h:=FindWindow(' Edit',nil);
это что за окно?

если это просто эдит на той же форме, то... (причем первый эдит в "чилдах")
procedure TForm1.Button1Click(Sender: TObject);
var
 Hndl: THandle;
 st: string;
begin
 SetLength(st, 255);
 Hndl:= FindWindowEx(Handle, 0, 'TEdit', nil);
 getwindowtext(Hndl, PChar(st), 255);
 Label1.Caption:= st;
end;


Eraser   (2006-04-24 17:34:00) [50]


> KSergey ©   (24.04.06 15:00) [11]


> и так хватает try/finally. Зачем еще плодить?

иногда можно и без try..finally обойтись, например так:

buf := nil;
...
GetMem(buf, SIZE);
...
if buf <> nil then
 FreeMem(buf);

но не всегда конечно.


Eraser   (2006-04-24 17:31:00) [51]


> Жаннка   (24.04.06 17:14) [19]

RTFM: This function cannot retrieve the text of an edit control in another application.


KygECHuK   (2006-04-24 17:25:00) [52]

> мне ведь нужно вытащить текст из конкретного эдита

Работа с ApI подразумевает подобные сложности.


Alarm   (2006-04-24 17:24:00) [53]

Не вдаваясь в детали, на будущее убедительно не рекомендовал бы использование переменных str :pchar;
По-скольку STR это все-таки зарезервированное слово (имя прцедуры)


Жаннка   (2006-04-24 17:14:00) [54]

а вот у меня чет непонятки:
var
 h,k: HWND;
 str:pchar;
begin
GetMem(str,255);
h:=FindWindow('Edit',nil);
getwindowtext(h,str,255);
edit2.Text:=str;
FreeMem(str);
end;
мне ведь нужно вытащить текст из конкретного эдита


KygECHuK   (2006-04-24 17:13:00) [55]

> Мне, к примеру, удобней читать и использовать SysGet/FreeMem().

А чем отличаются SysGet от Getmem ?


Сергей М.   (2006-04-24 15:39:00) [56]


> KSergey ©   (24.04.06 15:26) [15]


> читай: повышения удобочитаемости программы


Мне, к примеру, удобней читать и использовать SysGet/FreeMem().
Так что на вкус и цвет ...


Anatoly Podgoretsky   (2006-04-24 15:38:00) [57]

Сергей М. ©   (24.04.06 15:18) [14]
Зато вызов GetMem не ведет к автоматическому управлению памятью.


KSergey   (2006-04-24 15:26:00) [58]

> Сергей М. ©   (24.04.06 15:18) [14]
> Вызов SetLength() ведет к неявному GetMem()

Безусловно.
но речь не о внутренностях и не об экономии на каких-либо вызовах, но на экономии кол-ва букв дельфи-текста (читай: повышения удобочитаемости программы)


Сергей М.   (2006-04-24 15:18:00) [59]


> или мое любимое
>
>   s: String;
> ....
>   SetLength(s, MAX_SIZE);


Вызов SetLength() ведет к неявному GetMem()


Сергей М.   (2006-04-24 15:17:00) [60]


> KSergey ©   (24.04.06 15:00) [11]


> что у вас за любовь к GetMem/FreeMem?


Вполне нормальная "любовь".
Стек-то не резиновый : сегодня тебе потребовалось MAX_SIZE байт в нем, и стек легко предоставил тебе их, а завтра тебе без переделки кода понадобится MAX_SIZE = десятки-сотни мегабайт - что тогда ?


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

Наверх

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