Вниз
Скачать: CL | DM;

Как получить длину имени класса получаемый GetClassName   Найти похожие ветки 

 
izya   (2009-08-17 14:43) [0]

делаю так
...
W: Hwnd;
...
GetClassName(W, Cs, GetWindowTextLength(W) + 1)

только GetWindowTextLength восврасщает длину заголовка а не имени класса окна


 
Leonid Troyanovsky ©   (2009-08-17 14:55) [1]


> izya   (17.08.09 14:43)  

> не имени класса окна

А причем тут имя класса?

From msdn: WNDCLASS Structure:

The maximum length for lpszClassName is 256.

Реальная длина строки - результат, возвращаемый GetClassName.

--
Regards, LVT.


 
izya   (2009-08-17 15:12) [2]

ну тогда зачем нужен третий параметр если всегда 256 писать? Хотел узнать точную длину, если можно, а не обрезать по #0


 
Anatoly Podgoretsky ©   (2009-08-17 15:17) [3]


> If the function succeeds, the return value is the number
> of characters copied to the specified buffer.


 
Юрий Зотов ©   (2009-08-17 16:52) [4]

> izya   (17.08.09 15:12) [2]
> зачем нужен третий параметр если всегда 256 писать?

Не обязательно всегда писать 256. Мы же сами выделяем буфер - какой хотим, такой и выделим. А параметр нужен, чтобы функция знала размер выделеного для нее буфера и не вылезала за его пределы. Иначе запортится память с непредсказуемыми последствиями.

Вообще, указание адреса и размера буфера в параметрах функций используется очень часто. Это, можно сказать, классика.

Обычно я использую такой прием:

var
 S: string;
...
SetLength(S, 256);
SetLength(S, GetClassName(Wnd, @S[1], Length(S)));


 
Anatoly Podgoretsky ©   (2009-08-17 17:00) [5]

> Юрий Зотов  (17.08.2009 16:52:04)  [4]

И почти всегда можно получить размер, если указать буфер меньшего размера, обычно 0, данная функция именно к этому классу относится, за исключением, того, что ошибка не возбуждается, просто значение урезается.


 
Leonid Troyanovsky ©   (2009-08-17 17:31) [6]


> Юрий Зотов ©   (17.08.09 16:52) [4]

> SetLength(S, 256);

Я бы здесь написал

var
 buf: array[0..256] of Char;
 num: Longint;
begin
 num := GetClassName(wnd, buf, Hi(buf));
 Win32Check(num <> 0);
 SetString(Result, buf, num);
end;

бо, в буфер пишется и завершающий #0.

--
Regards, LVT.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.009 c
4-1219768499
Deltas
2008-08-26 20:34
2009.10.18
Кнопки в системном меню


11-1206427258
Петровичъ
2008-03-25 09:40
2009.10.18
MCK для BDS2005-2007


2-1250832350
GlTech
2009-08-21 09:25
2009.10.18
Указатели


2-1250517034
ford
2009-08-17 17:50
2009.10.18
RichEdit текст в верхнем индексе


6-1208274224
Незнайка
2008-04-15 19:43
2009.10.18
Отправка большого количества писем




   Наверх