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

как быть?


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


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

Наверх

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