Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получить текст текущего окна на Delphi. [D7, WinXP]


jeon ©   (2004-08-08 18:53:00) 

У меня 7-я версия делфи. Не могу получить текст текущего окна. Мне пишет, что в библиотеке user32.dll нету функции GetWindowText (!!!). Проделал то же самое на VB – работает. Может я где в коде ошибку допустил. Помогите плиз. Вот мой код (начиная с объявления API:

implementation
function GetWindowText(Wnd: HWnd; Str: PChar; MaxCount: Integer): Integer;
stdcall; external 'user32.dll';

function GetWindowTextLength(Wnd: HWnd): Integer;
stdcall; external 'user32.dll';
{$R *.dfm}

function GetForegroundWindow():Integer;
stdcall; external 'user32.dll';

procedure TForm1.Button1Click(Sender: TObject);
var s:pchar;
res,buf:integer;
hnd:integer;

begin
hnd:=getforegroundwindow();
buf:=getwindowtextlength(hnd);
res:=getwindowtext(hnd,s,buf);
edit1.text:=s;
end;


VMcL   (2004-08-10 13:08:00) [1]

>> Cobalt ©  (10.08.04 12:37) [12]

> Хм, интересно, откуда ты это раскопал?

В MSDN.

> А вот в MS SDK Help Files в Win32.hlp я этого (GetWindowTextA/W) не нашёл (D7)

Само собой. В Help'е - GetWindowText(). А поскольку есть две версии ANSI и Unicode, то значит реальные имена GetWindowTextA и GetWindowTextW.


Cobalt   (2004-08-10 12:37:00) [2]

2 VMcL ©   (09.08.04 10:57) [10]
Хм, интересно, откуда ты это раскопал?
я ни в SDK Reference, ни в MSDN не нашёл
А насчёт функций A/W я знал :)

2 Sergey Kaminski ©
Я имел в виду что она (функция) есть в модуле Windows.pas.
А вот в MS SDK Help Files в Win32.hlp я этого (GetWindowTextA/W) не нашёл (D7)


Sergey Kaminski   (2004-08-10 02:27:00) [3]

VMcL ©   (09.08.04 10:57) [10]

Это было домашнее задание Cobalt'а :))))


VMcL   (2004-08-09 10:57:00) [4]

>> Cobalt ©  (09.08.04 01:22) [8]

Windows 95/98/Me:GetWindowTextW is supported by the Microsoft® Layer for Unicode (MSLU). To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.

...

Implemented as Unicode and ANSI versions on Windows NT, Windows 2000, Windows XP


Отсюда соотвествующий вывод.


Sergey Kaminski   (2004-08-09 03:06:00) [5]

2 Cobalt ©

Что-то мне сложно понять Ваши доводы.
Кстати, "эта" функция есть даже в Win32.hlp, не то что в MSDN (в MSDN тоже, разумеется,есть).

Вы не туда смотрели. Нужно смотреть какие имена импортиртирует из dll:

function GetWindowText; external user32 name 'GetWindowTextA';
function GetWindowTextA; external user32 name 'GetWindowTextA';
function GetWindowTextW; external user32 name 'GetWindowTextW';

А не под какими они в интерфейс-секции указаны.

А чтобы впредь избежать подобных заявлений, советую самостоятельно разобраться что это за "A" & "W". И почему нет GetWindowText.
Сказано не со зла, просто совет.


Cobalt   (2004-08-09 01:22:00) [6]

а вот MSDN чё-то не нашёл мне ничего :(
И вообще знает только эту функцию:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/getwindowtext.asp


VMcL   (2004-08-09 00:52:00) [7]

>>Cobalt ©  (08.08.04 23:36) [5]

> 2 Sergey Kaminski ©  (08.08.04 21:18) [4]
> Наглые враки!!!

Щас LMD получишь. Смотри свой же пост. Нет в этой DLL никакой GetWindowText, а есть GetWindowTextA и GetWindowTextW.


Kirill35   (2004-08-08 23:44:00) [8]

не надо ничего явно вызывать из библиотек

procedure TForm1.Button1Click(Sender: TObject);
var Text: array [0..255] of Char;
 Handle: HWnd;
    Cap: String;
begin
Handle := GetForegroundWindow;
GetWindowText(Handle, Text, 255);
Cap := StrPas(Text);
ShowMessage(Cap);
end;


Cobalt   (2004-08-08 23:36:00) [9]

2 Sergey Kaminski ©   (08.08.04 21:18) [4]
Наглые враки!!!
Borland Delphi 7.0 Enterprise Vesion 7.0 (Build 4.453)
Windows.pas:

{$EXTERNALSYM GetWindowText}
functionGetWindowText(hWnd: HWND; lpString: PChar; nMaxCount: Integer): Integer; stdcall;
{$EXTERNALSYM GetWindowTextA}
functionGetWindowTextA(hWnd: HWND; lpString: PAnsiChar; nMaxCount: Integer): Integer; stdcall;
{$EXTERNALSYM GetWindowTextW}
functionGetWindowTextW(hWnd: HWND; lpString: PWideChar; nMaxCount: Integer): Integer; stdcall;


Sergey Kaminski   (2004-08-08 21:18:00) [10]

А там нет такой функции. Там есть такие:
GetWindowTextA,GetWindowTextW


KSergey   (2004-08-08 21:06:00) [11]

или
uses Windows;

Что-то запамятовал :)


KSergey   (2004-08-08 21:05:00) [12]

Может вместо собственных лбъявлений взять да и написать
uses Window;


panov   (2004-08-08 19:01:00) [13]

Перед тем, как добавлять ветки в форум, надо правила почитать.
(Это о попытках задать один вопрос в несколько конференций)


Наверх

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