![]() |
| ||
|
|
Новости |
Поиск |
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
как быть?
Anatoly Podgoretsky (2006-04-24 15:02:00) [61]KSergey © (24.04.06 15:00) [11]
Ну это понятно, я тоже применю string, он же полностью совместим с PChar
KSergey (2006-04-24 15:00:00) [62]Попробую поспорить о вкусах.
Люди, что у вас за любовь к GetMem/FreeMem?
ну проще же сделать или как в приведенной сной ссылке
buff: ARRAY [0..MAX_SIZE-1] OF Char;
или мое любимое
s: String;
....
SetLength(s, MAX_SIZE);
GetWindowText(hWindow, PChar(s), MAX_SIZE);
...
Я не уверен, что последнее буквально в таком виде откомпилируется, но смысл понятен, уверен.
Пусть себе компилятор сам освобождает ресурсы, и так хватает try/finally. Зачем еще плодить?
Eraser (2006-04-24 14:46:00) [63]
> balepa © (24.04.06 14:27) [8]
к тому что GetWindowText в качестве 2 параметра требует не буффер, а указатель на него.
Anatoly Podgoretsky (2006-04-24 14:41:00) [64]balepa © (24.04.06 14:12) [6]
А вот это getwindowtext(mhwnd,s^,50); компилятор ругает
Incompatible types: 'Char' and 'PAnsiChar'
Возможно крышечка лишняя, не охота лезть в модуль Windows.pas
balepa (2006-04-24 14:27:00) [65]
> Eraser © (24.04.06 14:24) [7]
Это типа к чему ?
Eraser (2006-04-24 14:24:00) [66]
> balepa © (24.04.06 14:12) [6]
procedure TForm1.Button1Click(Sender: TObject);
const
MAX_SIZE = 255;
var
hWindow: THandle;
buf: PChar;
begin
hWindow := FindWindow(nil, 'Калькулятор');
if hWindow = 0 then
Exit;
buf := nil;
try
GetMem(buf, MAX_SIZE);
GetWindowText(hWindow, buf, MAX_SIZE);
ShowMessage(buf);
finally
FreeMem(buf);
end;
end;
balepa (2006-04-24 14:12:00) [67]
> Anatoly Podgoretsky © (24.04.06 14:05) [5]
Да вроде как все, но на всякий случай спрошу у очевидцев :)
А вот это getwindowtext(mhwnd,s^,50); компилятор ругает
Incompatible types: 'Char' and 'PAnsiChar'
Под Pointer выделяю под PChаr нет, ладно раз говорите надо, буду выделять.
Anatoly Podgoretsky (2006-04-24 14:05:00) [68]balepa © (24.04.06 14:01) [4]
Это от того, что ты в рубашке родился.
balepa (2006-04-24 14:01:00) [69]
> Anatoly Podgoretsky © (24.04.06 13:48) [2]
Под PChar надо память выделять что ли ?
У меня и без етого работает.
procedure TForm1.Button1Click(Sender: TObject);
var
S:PChar;
mHWND: HWND;
begin
mHWND:= FindWindow('TForm1','Form1');
if mHWND<>0 then
begin
getwindowtext(mhwnd,s,50);
Edit1.Text:= s;
end
else
MessageBox(Form1.Handle,'Окно не найдено','Message',16);
end;
Жаннка (2006-04-24 13:57:00) [70]
> Надо выделить память GetMem(GG,21), а в конце ее освободить
> FreeMem(GG)
> и вызов должен быть немного другой
> edit2.Text:=getwindowtext(H,gg^,20);
> Кроме того надо анализировать результат работы всех функций,
> особенно getwindowtext
большое спасибо,все получилось!
Anatoly Podgoretsky (2006-04-24 13:48:00) [71]Надо выделить память GetMem(GG,21), а в конце ее освободить FreeMem(GG)
и вызов должен быть немного другой
edit2.Text:=getwindowtext(H,gg^,20);
Кроме того надо анализировать результат работы всех функций, особенно getwindowtext
KSergey (2006-04-24 13:31:00) [72]Вот тут описано, с примерами
http://articles.org.ru/docum/winandproc.php
да и не только тама... пользуем google.com