![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
api
Жаннка © (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 = десятки-сотни мегабайт - что тогда ?