Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Delphi"


Паскаль, Делфи


 #0 Карлсон © 06.05.08 22:12:20 - 07.05.08 14:49:26

GetWindowText



Как работает эта функция?) Вообще не въехал..
Или как по другому можно узнать заголовок окна?)
Заранее Спасибо.. Цитата

 #1 Deep © 06.05.08 23:52:34

> #0 Карлсон ©
а с какими параметрами ты вызываешь функцию?

Если например тебе нужно узнать заголовок активного окна, то сначала получить handle на активное окно с помощью GetActiveWindow функции, а потом получить его заголовок с помощью GetWindowText функции.
 #2 Карлсон © 07.05.08 06:55:00

GetWindowText(hwnd, PChar,255)
С handlом там всё понятно.. Когда вызываеться эта процедура в pchar мусор образуеться... Вместо символов...
 #3 Deep © 07.05.08 08:43:35

Нужно примерно вот так:

var
  Wnd : hWnd;
  buff : array[0.. 127] of Char;
begin
  ...
  GetWindowText (Wnd, buff, sizeof (buff ));
  MessageDlg('Title: '  + StrPas (buff), mtWarning, [mbOk], 0);  
end;

 #4 Deep © 07.05.08 08:55:50

Получить строку от функции Win API несколько сложнее, чем передать её. Обычно это делается в несколько этапов. Сначала с помощью функций Win API выясняется, какова длина строки. Затем резервируется место для неё. А только затем вызывается та функция, которая копирует строку в приготовленный буфер. Например, для получения заголовка окна нужно использовать функции GetWindowTextLength и GetWindowText. В некоторых случаях можно облегчить себе жизнь, если существует ограничение на максимальную длину строки. Например, атом не может быть длиннее 255-ти символов. Поэтому можно выделить буфер размером 256 символов (один - для завершающего нуля), и сразу копировать туда атом. В любом случае полученная строка будет нуль-терминированной. Чтобы преобразовать её к обычной, используйте функцию StrPas. Или же можно просто выполнить присвоение S := P, где S - типа string, P - PChar.

Другой тип кодировки, поддерживаемый в Windows, называется Wide. В отличие от ANSI в нём для представления одного символа используется не один, а два байта. Все функции, работающие со строками, написаны в двух модификациях - для ANSI и для Wide. Например, если посмотреть модуль user32, в котором, как утверждает справка, описана функция GetWindowText, то видно, что там нет такой функции. Там есть две другие функции - GetWindowTextA и GetWindowTextW, работающие каждая с соответствующей кодировкой. И это относится ко всем функциям, работающим со строками. К тому имени функции, которое указано в справке, необходимо добавить 'A' или 'W', в зависимости от используемой кодировки.
 #5 Карлсон © 07.05.08 14:49:26

Во) То что надо) спасибо=)




  • Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов